W1: Support onewire master on i.MX53
Subsystems (7)
v3 cover W1: Support onewire master on i.MX53
W1: Support onewire master on i.MX53
* Add device tree and pinctrl support to the MXC master driver
* Convert to use devm_
* Add i.MX53 clocks
* Add i.MX53 device tree entries
Changes since V2
* Add documentation on device tree binding
* Add Acked-bys from Sascha and Evgeniy
Changes since V1
* Applied comments from Sascha Hauer:
* Move patch converting driver to devm_ before the one adding devm_ based pinctrl
* Fix existing unbalanced clk_prepare_enable/clk_disable_unprepare in probe error path
* Place DT patch last since it includes pinctrls for driver.
PATCH v3 1/5 W1: Add device tree support to MXC onewire master.
--- .../devicetree/bindings/w1/fsl-imx-owire.txt | 20 ++++++++++++++++++++ drivers/w1/masters/mxc_w1.c | 9 ++++++++- 2 files changed, 28 insertions(+), 1 deletions(-) create mode 100644 Documentation/devicetree/bindings/w1/fsl-imx-owire.txt
Documentation/devicetree/bindings/w1/fsl-imx-owire.txt new file +20 -0
@@ -0,0 +1,20 @@ +* Freescale i.MX One wire bus master controller + +Required properties: +- compatible : should be "fsl,imx21-owire" +- reg : Address and length of the register set for the device + +Optional properties: +- clocks : phandle of clock that supplies the module (required if platform + clock bindings use device tree) + +Example: + +- From imx53.dtsi: +owire: owire at 63fa4000 { + compatible = "fsl,imx53-owire", "fsl,imx21-owire"; + reg = <0x63fa4000 0x4000>; + clocks = <&clks 159>; + status = "disabled"; +}; +
drivers/w1/masters/mxc_w1.c +8 -1
@@ -186,9 +186,16 @@ static int mxc_w1_remove(struct platform_device *pdev)return 0 ; } +static struct of_device_id mxc_w1_dt_ids[] = { + { .compatible ="fsl,imx21-owire" }, + {/* sentinel */ } +}; +MODULE_DEVICE_TABLE (of, mxc_w1_dt_ids); +static struct platform_driver mxc_w1_driver = { .driver = { - .name ="mxc_w1" , + .name ="mxc_w1" , + .of_match_table = mxc_w1_dt_ids, }, .probe = mxc_w1_probe, .remove = mxc_w1_remove,
PATCH v3 2/5 ARM: i.MX53: Add clocks for i.mx53 onewire master.
In reply to Martin Fuzzey--- .../devicetree/bindings/clock/imx5-clock.txt | 1 + arch/arm/mach-imx/clk-imx51-imx53.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletions(-)
Documentation/devicetree/bindings/clock/imx5-clock.txt +1 -0
@@ -171,6 +171,7 @@ clocks and IDs. can_sel 156 can1_serial_gate 157 can1_ipg_gate 158 + owire_gate 159 Examples (for mx53):
arch/arm/mach-imx/clk-imx51-imx53.c +3 -1
@@ -83,6 +83,7 @@ enum imx5_clks { ssi2_root_gate, ssi3_root_gate, ssi_ext1_gate, ssi_ext2_gate, epit1_ipg_gate, epit1_hf_gate, epit2_ipg_gate, epit2_hf_gate, can_sel, can1_serial_gate, can1_ipg_gate, + owire_gate, clk_max };
@@ -233,12 +234,13 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil, clk[epit1_hf_gate] =imx_clk_gate2 ("epit1_hf_gate" ,"per_root" ,MXC_CCM_CCGR2 ,4 ); clk[epit2_ipg_gate] =imx_clk_gate2 ("epit2_ipg_gate" ,"ipg" ,MXC_CCM_CCGR2 ,6 ); clk[epit2_hf_gate] =imx_clk_gate2 ("epit2_hf_gate" ,"per_root" ,MXC_CCM_CCGR2 ,8 ); + clk[owire_gate] =imx_clk_gate2 ("owire_gate" ,"per_root" ,MXC_CCM_CCGR2 ,22 );for (i =0 ; i <ARRAY_SIZE (clk); i++)if (IS_ERR (clk[i]))pr_err ("i.MX5 clk %d: register failed with %ld\n" , i,PTR_ERR (clk[i])); - +clk_register_clkdev (clk[gpt_hf_gate],"per" ,"imx-gpt.0" );clk_register_clkdev (clk[gpt_ipg_gate],"ipg" ,"imx-gpt.0" );clk_register_clkdev (clk[uart1_per_gate],"per" ,"imx21-uart.0" );
PATCH v3 3/5 W1: Convert MXC onewire master to devm_ functions.
In reply to Martin FuzzeyWhile doing this fix missing clk_disable_unprepare in error path.
--- drivers/w1/masters/mxc_w1.c | 26 ++++++-------------------- 1 files changed, 6 insertions(+), 20 deletions(-)
drivers/w1/masters/mxc_w1.c +6 -20
@@ -117,7 +117,7 @@ static int mxc_w1_probe(struct platform_device *pdev)if (!mdev)return -ENOMEM ; - mdev->clk =clk_get (&pdev->dev,NULL ); + mdev->clk =devm_clk_get (&pdev->dev,NULL );if (IS_ERR (mdev->clk)) { err =PTR_ERR (mdev->clk); goto failed_clk;
@@ -125,17 +125,11 @@ static int mxc_w1_probe(struct platform_device *pdev) mdev->clkdiv = (clk_get_rate (mdev->clk) /1000000 ) -1 ; - res =request_mem_region (res->start,resource_size (res), -"mxc_w1" ); -if (!res) { - err = -EBUSY ; - goto failed_req; - } - - mdev->regs =ioremap (res->start,resource_size (res)); + mdev->regs =devm_request_and_ioremap (&pdev->dev, res);if (!mdev->regs) {dev_err (&pdev->dev,"Cannot map mxc_w1 registers\n" ); - goto failed_ioremap; + err = -ENXIO ; + goto failed_req; }clk_prepare_enable (mdev->clk);
@@ -154,11 +148,9 @@ static int mxc_w1_probe(struct platform_device *pdev)return 0 ; failed_add: -iounmap (mdev->regs); -failed_ioremap: -release_mem_region (res->start,resource_size (res)); +clk_disable_unprepare (mdev->clk); + failed_req: -clk_put (mdev->clk); failed_clk:kfree (mdev);return err;
@@ -170,16 +162,10 @@ failed_clk:static int mxc_w1_remove (struct platform_device *pdev) {struct mxc_w1_device *mdev =platform_get_drvdata (pdev); -struct resource *res; - - res =platform_get_resource (pdev,IORESOURCE_MEM ,0 );w1_remove_master_device (&mdev->bus_master); -iounmap (mdev->regs); -release_mem_region (res->start,resource_size (res));clk_disable_unprepare (mdev->clk); -clk_put (mdev->clk);platform_set_drvdata (pdev,NULL );
PATCH v3 4/5 W1: Add pinctrl support to MXC onewire master.
In reply to Martin Fuzzey--- drivers/w1/masters/mxc_w1.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)
drivers/w1/masters/mxc_w1.c +10 -0
@@ -24,6 +24,7 @@#include <linux/slab.h> #include <linux/delay.h> #include <linux/io.h> +#include <linux/pinctrl/consumer.h> #include "../w1.h" #include "../w1_int.h"
@@ -107,6 +108,7 @@ static int mxc_w1_probe(struct platform_device *pdev) {struct mxc_w1_device *mdev;struct resource *res; +struct pinctrl *pinctrl;int err =0 ; res =platform_get_resource (pdev,IORESOURCE_MEM ,0 );
@@ -117,6 +119,13 @@ static int mxc_w1_probe(struct platform_device *pdev)if (!mdev)return -ENOMEM ; + pinctrl =devm_pinctrl_get_select_default (&pdev->dev); +if (IS_ERR (pinctrl)) { + err =PTR_ERR (pinctrl); +dev_err (&pdev->dev,"failed to get default pinctrl: %d\n" , err); + goto failed_pin; + } + mdev->clk =devm_clk_get (&pdev->dev,NULL );if (IS_ERR (mdev->clk)) { err =PTR_ERR (mdev->clk);
@@ -152,6 +161,7 @@ failed_add: failed_req: failed_clk: +failed_pin:kfree (mdev);return err; }
PATCH v3 5/5 DTS: Add device tree entry for onewire master on i.MX53
In reply to Martin Fuzzey--- arch/arm/boot/dts/imx53.dtsi | 15 +++++++++++++++ 1 files changed, 15 insertions(+), 0 deletions(-)
arch/arm/boot/dts/imx53.dtsi +15 -0
@@ -387,6 +387,14 @@ }; }; + owire { + pinctrl_owire_1: owiregrp-1 { + fsl,pins = < + 1166 0x80000000 /* MX53_PAD_GPIO_18__OWIRE_LINE */ + >; + }; + }; + uart1 { pinctrl_uart1_1: uart1grp-1 { fsl,pins = <
@@ -570,6 +578,13 @@ status = "disabled"; }; + owire: owire@63fa4000 { + compatible = "fsl,imx53-owire", "fsl,imx21-owire"; + reg = <0x63fa4000 0x4000>; + clocks = <&clks 159>; + status = "disabled"; + }; + ecspi2: ecspi at 63fac000 { #address-cells = <1>; #size-cells = <0>;
Shawn Guo
Appliedv3 cover W1: Support onewire master on i.MX53
In reply to Martin FuzzeyQuoted 5 lines · Martin Fuzzey
W1: Support onewire master on i.MX53
* Add device tree and pinctrl support to the MXC master driver
* Convert to usedevm_
* Add i.MX53 clocks
* Add i.MX53 device tree entries
Applied, thanks.
I changed the patch order a little bit, moving dts change to the last, and also fix the patch subject prefix.
W1: Add device tree support to MXC onewire master.
W1: Convert MXC onewire master to devm_ functions.
W1: Add pinctrl support to MXC onewire master.
ARM: i.MX53: Add clocks for i.mx53 onewire master.
ARM: dts: Add device tree entry for onewire master on i.MX53
One 'new blank line at EOF' warning on patch #1 gets fixed.
And please remember to add some commit log for patches you submit in the future. Empty commit log is not good.
Shawn
v3 cover W1: Support onewire master on i.MX53
Quoted 7 lines · Shawn Guo
Quoted 5 lines · Martin Fuzzey
W1: Support onewire master on i.MX53
* Add device tree and pinctrl support to the MXC master driver
* Convert to usedevm_
* Add i.MX53 clocks
* Add i.MX53 device tree entries
Quoted 7 lines
Applied, thanks.
I changed the patch order a little bit, moving dts change to the last, and also fix the patch subject prefix.
W1: Add device tree support to MXC onewire master.
W1: Convert MXC onewire master todevm_functions.
I have to drop this one, as I see patch e5279ff (drivers/w1/masters/mxc_w1.c: use devm_ functions) on linux-next, which does the same thing.
Quoted 1 line
W1: Add pinctrl support to MXC onewire master.
And I would drop this one too, because patch ab78029 (drivers/pinctrl:
grab default handles from device core) will have it handled globally at driver core level.
Shawn
Quoted 2 lines
ARM: i.MX53: Add clocks for i.mx53 onewire master.
ARM: dts: Add device tree entry for onewire master on i.MX53