RE: [PATCH v4 5/8] MFD: ti_am335x_tscadc: Add DT support
From: Hiremath, Vaibhav <hidden>
Date: 2013-01-31 05:02:40
Also in:
linux-arm-kernel, linux-devicetree, linux-iio, linux-omap, lkml
On Thu, Jan 31, 2013 at 09:41:11, Patil, Rachna wrote:
On Wed, Jan 30, 2013 at 16:10:09, Koen Kooi wrote:quoted
Op 24 jan. 2013, om 04:45 heeft "Patil, Rachna" [off-list ref] het volgende geschreven:quoted
From: "Patil, Rachna" <redacted> Make changes to add DT support in the MFD core driver. Signed-off-by: Patil, Rachna <redacted> --- Changes in v4: Non-standard properties prefixed with vendor name. drivers/mfd/ti_am335x_tscadc.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-)diff --git a/drivers/mfd/ti_am335x_tscadc.cb/drivers/mfd/ti_am335x_tscadc.c index e9f3fb5..87b446b 100644--- a/drivers/mfd/ti_am335x_tscadc.c +++ b/drivers/mfd/ti_am335x_tscadc.c@@ -22,6 +22,8 @@#include <linux/regmap.h> #include <linux/mfd/core.h> #include <linux/pm_runtime.h> +#include <linux/of.h> +#include <linux/of_device.h> #include <linux/mfd/ti_am335x_tscadc.h> #include <linux/input/ti_am335x_tsc.h>@@ -64,20 +66,31 @@ static int ti_tscadc_probe(struct platform_device *pdev)struct resource *res; struct clk *clk; struct mfd_tscadc_board *pdata = pdev->dev.platform_data; + struct device_node *node = pdev->dev.of_node; struct mfd_cell *cell; int err, ctrl; int clk_value, clock_rate; - int tsc_wires, adc_channels = 0, total_channels; + int tsc_wires = 0, adc_channels = 0, total_channels; - if (!pdata) { + if (!pdata && !pdev->dev.of_node) { dev_err(&pdev->dev, "Could not find platform data\n"); return -EINVAL; } - if (pdata->adc_init) - adc_channels = pdata->adc_init->adc_channels; + if (pdev->dev.platform_data) { + if (pdata->tsc_init) + tsc_wires = pdata->tsc_init->wires; + + if (pdata->adc_init) + adc_channels = pdata->adc_init->adc_channels; + } else { + node = of_find_node_by_name(pdev->dev.of_node, "tsc"); + of_property_read_u32(node, "ti,wires", &tsc_wires); + + node = of_find_node_by_name(pdev->dev.of_node, "adc"); + of_property_read_u32(node, "ti,adc-channels", &adc_channels); + }Since AM335x is DT only, why is there a platform data codepath and why is it the first branch it tries? And I guess the next question is related to the first: why doesn't it work when used with DT? When I copy over the nodes from the evm.dts to my board I get "tsc tsc: Missing platform data" in dmesg.This IP came up 1st on AM335x, but it is not platform dependent. The driver can be used on other platforms where-in DT is not supported. According to the maintainers platform data takes precedence over DT. Hence the order.
Rachana, I see no point adding support for platform_data when you know that none of older platforms are going to use this driver and all future platforms _must_ follow device-tree model. So I agree that you should remove board file dependency from the driver.
I do not see "Missing platform data" error msg in the latest driver. I am not able to trace from where this got populated.
Can you share the branch which you have tested? Thanks, Vaibhav
quoted
What are the chances this driver will work when applied on top of 3.8-rcX? Has it even been tested with that? Has it been tested at all?This driver has been tested on top of v3.8-rc3 on a AM335x EVM. Regards, Rachna _______________________________________________ devicetree-discuss mailing list devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org https://lists.ozlabs.org/listinfo/devicetree-discuss