From: Robert Baldyga <r.baldyga@samsung.com> To: unlisted-recipients:; (no To-header on input) Cc: robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com, ijc+devicetree@hellion.org.uk, galak@codeaurora.org, rob@landley.net, myungjoo.ham@samsung.com, cw00.choi@samsung.com, dbaryshkov@gmail.com, dwmw2@infradead.org, balbi@ti.com, gregkh@linuxfoundation.org, grant.likely@linaro.org, ldewangan@nvidia.com, kishon@ti.com, gg@slimlogic.co.uk, anton@enomsg.org, jonghwa3.lee@samsung.com, rongjun.ying@csr.com, linux@roeck-us.net, devicetree@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.wolfsonmicro.com, linux-usb@vger.kernel.org, linux-omap@vger.kernel.org, aaro.koskinen@iki.fi, m.szyprowski@samsung.com, t.figa@samsung.com, Robert Baldyga <r.baldyga@samsung.com> Subject: [PATCH v2 11/13] extcon: extcon-adc-jack: add devicetree support Date: Mon, 14 Apr 2014 13:46:22 +0200 [thread overview] Message-ID: <1397475984-28001-12-git-send-email-r.baldyga@samsung.com> (raw) In-Reply-To: <1397475984-28001-1-git-send-email-r.baldyga@samsung.com> This patch modifies extcon-adc-jack driver to use initialization data from devicetree, when platform data is not available. It allows to define cable list with ADC value ranges for each of them in devicetree bindings. Signed-off-by: Robert Baldyga <r.baldyga@samsung.com> --- drivers/extcon/extcon-adc-jack.c | 81 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/drivers/extcon/extcon-adc-jack.c b/drivers/extcon/extcon-adc-jack.c index d65915e..f1a1399 100644 --- a/drivers/extcon/extcon-adc-jack.c +++ b/drivers/extcon/extcon-adc-jack.c @@ -21,6 +21,7 @@ #include <linux/err.h> #include <linux/interrupt.h> #include <linux/workqueue.h> +#include <linux/of.h> #include <linux/iio/consumer.h> #include <linux/extcon/extcon-adc-jack.h> #include <linux/extcon.h> @@ -92,12 +93,85 @@ static irqreturn_t adc_jack_irq_thread(int irq, void *_data) return IRQ_HANDLED; } +#ifdef CONFIG_OF +static struct adc_jack_pdata *get_pdata_from_dt(struct device *dev) +{ + int ret, cnt, i; + struct device_node *cables_np, *child; + struct adc_jack_pdata *pdata = + devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); + + ret = of_property_read_string_index(dev->of_node, + "adc-name", 0, &pdata->name); + if (ret) + return NULL; + + ret = of_property_read_string_index(dev->of_node, + "adc-consumer-channel", 0, &pdata->consumer_channel); + if (ret) + return NULL; + + cables_np = of_find_node_by_name(dev->of_node, "cables"); + if (!cables_np) + return NULL; + + cnt = of_get_child_count(cables_np); + if (cnt <= 0) + return NULL; + + pdata->cable_names = devm_kcalloc(dev, cnt+1, + sizeof(*pdata->cable_names), GFP_KERNEL); + if (!pdata->cable_names) + return NULL; + + pdata->adc_conditions = devm_kcalloc(dev, cnt+1, + sizeof(*pdata->adc_conditions), GFP_KERNEL); + if (!pdata->adc_conditions) + return NULL; + + i = 0; + for_each_child_of_node(cables_np, child) { + ret = of_property_read_string_index(child, + "cable-name", 0, &pdata->cable_names[i]); + if (ret) + return NULL; + + pdata->adc_conditions[i].state = (1<<i); + + ret = of_property_read_u32_array(child, "adc-min", + &pdata->adc_conditions[i].min_adc, 0); + if (ret) + return NULL; + + ret = of_property_read_u32_array(child, "adc-max", + &pdata->adc_conditions[i].max_adc, 0); + if (ret) + return NULL; + + i++; + } + + return pdata; +} +#else +static struct adc_jack_pdata *get_pdata_from_dt(struct device *dev) +{ + return NULL; +} +#endif /* CONFIG_OF */ + static int adc_jack_probe(struct platform_device *pdev) { struct adc_jack_data *data; struct adc_jack_pdata *pdata = dev_get_platdata(&pdev->dev); int i, err = 0; + if (!pdata) { + pdata = get_pdata_from_dt(&pdev->dev); + if (!pdata) + return -EINVAL; + } + data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); if (!data) return -ENOMEM; @@ -188,11 +262,18 @@ static int adc_jack_remove(struct platform_device *pdev) return 0; } +static struct of_device_id of_adc_jack_match_tbl[] = { + { .compatible = "extcon-adc-jack", }, + { /* end */ }, +}; + + static struct platform_driver adc_jack_driver = { .probe = adc_jack_probe, .remove = adc_jack_remove, .driver = { .name = "adc-jack", + .of_match_table = of_adc_jack_match_tbl, .owner = THIS_MODULE, }, }; -- 1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: Robert Baldyga <r.baldyga@samsung.com> Cc: robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com, ijc+devicetree@hellion.org.uk, galak@codeaurora.org, rob@landley.net, myungjoo.ham@samsung.com, cw00.choi@samsung.com, dbaryshkov@gmail.com, dwmw2@infradead.org, balbi@ti.com, gregkh@linuxfoundation.org, grant.likely@linaro.org, ldewangan@nvidia.com, kishon@ti.com, gg@slimlogic.co.uk, anton@enomsg.org, jonghwa3.lee@samsung.com, rongjun.ying@csr.com, linux@roeck-us.net, devicetree@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.wolfsonmicro.com, linux-usb@vger.kernel.org, linux-omap@vger.kernel.org, aaro.koskinen@iki.fi, m.szyprowski@samsung.com, t.figa@samsung.com, Robert Baldyga <r.baldyga@samsung.com> Subject: [PATCH v2 11/13] extcon: extcon-adc-jack: add devicetree support Date: Mon, 14 Apr 2014 13:46:22 +0200 [thread overview] Message-ID: <1397475984-28001-12-git-send-email-r.baldyga@samsung.com> (raw) In-Reply-To: <1397475984-28001-1-git-send-email-r.baldyga@samsung.com> This patch modifies extcon-adc-jack driver to use initialization data from devicetree, when platform data is not available. It allows to define cable list with ADC value ranges for each of them in devicetree bindings. Signed-off-by: Robert Baldyga <r.baldyga@samsung.com> --- drivers/extcon/extcon-adc-jack.c | 81 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/drivers/extcon/extcon-adc-jack.c b/drivers/extcon/extcon-adc-jack.c index d65915e..f1a1399 100644 --- a/drivers/extcon/extcon-adc-jack.c +++ b/drivers/extcon/extcon-adc-jack.c @@ -21,6 +21,7 @@ #include <linux/err.h> #include <linux/interrupt.h> #include <linux/workqueue.h> +#include <linux/of.h> #include <linux/iio/consumer.h> #include <linux/extcon/extcon-adc-jack.h> #include <linux/extcon.h> @@ -92,12 +93,85 @@ static irqreturn_t adc_jack_irq_thread(int irq, void *_data) return IRQ_HANDLED; } +#ifdef CONFIG_OF +static struct adc_jack_pdata *get_pdata_from_dt(struct device *dev) +{ + int ret, cnt, i; + struct device_node *cables_np, *child; + struct adc_jack_pdata *pdata = + devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); + + ret = of_property_read_string_index(dev->of_node, + "adc-name", 0, &pdata->name); + if (ret) + return NULL; + + ret = of_property_read_string_index(dev->of_node, + "adc-consumer-channel", 0, &pdata->consumer_channel); + if (ret) + return NULL; + + cables_np = of_find_node_by_name(dev->of_node, "cables"); + if (!cables_np) + return NULL; + + cnt = of_get_child_count(cables_np); + if (cnt <= 0) + return NULL; + + pdata->cable_names = devm_kcalloc(dev, cnt+1, + sizeof(*pdata->cable_names), GFP_KERNEL); + if (!pdata->cable_names) + return NULL; + + pdata->adc_conditions = devm_kcalloc(dev, cnt+1, + sizeof(*pdata->adc_conditions), GFP_KERNEL); + if (!pdata->adc_conditions) + return NULL; + + i = 0; + for_each_child_of_node(cables_np, child) { + ret = of_property_read_string_index(child, + "cable-name", 0, &pdata->cable_names[i]); + if (ret) + return NULL; + + pdata->adc_conditions[i].state = (1<<i); + + ret = of_property_read_u32_array(child, "adc-min", + &pdata->adc_conditions[i].min_adc, 0); + if (ret) + return NULL; + + ret = of_property_read_u32_array(child, "adc-max", + &pdata->adc_conditions[i].max_adc, 0); + if (ret) + return NULL; + + i++; + } + + return pdata; +} +#else +static struct adc_jack_pdata *get_pdata_from_dt(struct device *dev) +{ + return NULL; +} +#endif /* CONFIG_OF */ + static int adc_jack_probe(struct platform_device *pdev) { struct adc_jack_data *data; struct adc_jack_pdata *pdata = dev_get_platdata(&pdev->dev); int i, err = 0; + if (!pdata) { + pdata = get_pdata_from_dt(&pdev->dev); + if (!pdata) + return -EINVAL; + } + data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); if (!data) return -ENOMEM; @@ -188,11 +262,18 @@ static int adc_jack_remove(struct platform_device *pdev) return 0; } +static struct of_device_id of_adc_jack_match_tbl[] = { + { .compatible = "extcon-adc-jack", }, + { /* end */ }, +}; + + static struct platform_driver adc_jack_driver = { .probe = adc_jack_probe, .remove = adc_jack_remove, .driver = { .name = "adc-jack", + .of_match_table = of_adc_jack_match_tbl, .owner = THIS_MODULE, }, }; -- 1.7.9.5
next prev parent reply other threads:[~2014-04-14 11:50 UTC|newest] Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-04-14 11:46 [PATCH v2 00/13] extcon: major rework Robert Baldyga 2014-04-14 11:46 ` Robert Baldyga 2014-04-14 11:46 ` [PATCH v2 01/13] Documentation: add extcon devicetree bindings Robert Baldyga 2014-04-14 11:46 ` Robert Baldyga 2014-04-22 19:51 ` Mark Brown 2014-04-22 19:51 ` Mark Brown 2014-04-25 13:19 ` Robert Baldyga 2014-04-25 14:11 ` Mark Brown 2014-04-14 11:46 ` [PATCH v2 02/13] Documentation: update charger-manager " Robert Baldyga 2014-04-14 11:46 ` Robert Baldyga 2014-04-14 11:46 ` [PATCH v2 03/13] extcon: extcon-class: remove extcon_set_cable_state() function Robert Baldyga 2014-04-14 11:46 ` Robert Baldyga 2014-04-14 11:46 ` [PATCH v2 04/13] extcon: extcon-class: match extcon device by devicetree node Robert Baldyga 2014-04-14 11:46 ` Robert Baldyga 2014-04-14 11:46 ` [PATCH v2 05/13] extcon: extcon-class: improve extcon client API Robert Baldyga 2014-04-14 11:46 ` Robert Baldyga 2014-04-19 10:52 ` Aaro Koskinen 2014-04-22 6:21 ` Robert Baldyga 2014-04-22 6:21 ` Robert Baldyga 2014-04-22 14:51 ` Felipe Balbi 2014-04-22 14:51 ` Felipe Balbi 2014-04-22 15:03 ` Aaro Koskinen 2014-04-23 7:33 ` Robert Baldyga 2014-04-14 11:46 ` [PATCH v2 06/13] extcon: extcon-class: remove unused functions Robert Baldyga 2014-04-14 11:46 ` Robert Baldyga 2014-04-14 11:46 ` [PATCH v2 07/13] extcon: extcon-class: improve get_cable_state_()/set_cable_state_() functions Robert Baldyga 2014-04-14 11:46 ` Robert Baldyga 2014-04-14 11:46 ` [PATCH v2 08/13] extcon: extcon-class: simplify extcon_updata_state() function Robert Baldyga 2014-04-14 11:46 ` Robert Baldyga 2014-04-14 11:46 ` [PATCH v2 09/13] extcon: extcon-class: move example to Documentation Robert Baldyga 2014-04-14 11:46 ` Robert Baldyga 2014-04-14 11:46 ` [PATCH v2 10/13] extcon: extcon-gpio: add devicetree support Robert Baldyga 2014-04-14 11:46 ` Robert Baldyga 2014-04-14 11:46 ` Robert Baldyga [this message] 2014-04-14 11:46 ` [PATCH v2 11/13] extcon: extcon-adc-jack: " Robert Baldyga 2014-04-14 11:46 ` [PATCH v2 12/13] extcon: extcon-max8997: check if pdata exists Robert Baldyga 2014-04-14 11:46 ` Robert Baldyga 2014-04-14 11:46 ` [PATCH v2 13/13] extcon: extcon-max77693: " Robert Baldyga 2014-04-14 11:46 ` Robert Baldyga 2014-04-23 20:00 ` [PATCH v2 00/13] extcon: major rework Aaro Koskinen 2014-04-23 20:00 ` Aaro Koskinen 2014-04-24 19:52 ` Greg KH 2014-04-28 9:34 ` Robert Baldyga
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1397475984-28001-12-git-send-email-r.baldyga@samsung.com \ --to=r.baldyga@samsung.com \ --cc=aaro.koskinen@iki.fi \ --cc=anton@enomsg.org \ --cc=balbi@ti.com \ --cc=cw00.choi@samsung.com \ --cc=dbaryshkov@gmail.com \ --cc=devicetree@vger.kernel.org \ --cc=dwmw2@infradead.org \ --cc=galak@codeaurora.org \ --cc=gg@slimlogic.co.uk \ --cc=grant.likely@linaro.org \ --cc=gregkh@linuxfoundation.org \ --cc=ijc+devicetree@hellion.org.uk \ --cc=jonghwa3.lee@samsung.com \ --cc=kishon@ti.com \ --cc=ldewangan@nvidia.com \ --cc=linux-doc@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-omap@vger.kernel.org \ --cc=linux-usb@vger.kernel.org \ --cc=linux@roeck-us.net \ --cc=m.szyprowski@samsung.com \ --cc=mark.rutland@arm.com \ --cc=myungjoo.ham@samsung.com \ --cc=patches@opensource.wolfsonmicro.com \ --cc=pawel.moll@arm.com \ --cc=rob@landley.net \ --cc=robh+dt@kernel.org \ --cc=rongjun.ying@csr.com \ --cc=t.figa@samsung.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.