atmel-mci device tree support
Subsystems (6)
v5 cover atmel-mci device tree support
Hi,
This patch-set adds device tree support for atmel-mci.
Regards
Ludovic
v5:
- cleanup
- split dts commit: one for SOCs, one for boards
v4:
- cleanup
- add extra chips and boards for atmel-mci dt support
v3:
- use cd-inverted instead of cd-invert to follow mmc common binding.
- don't assign a pointer to pdev->dev.platform.
- add mci controller nodes to other chips and boards.
- put all dts file changes together.
v2:
- squash patch v1 2/4 and 3/4.
- change atmci_get_of_slots to atmci_of_init and manage pdata allocation into it.
- correct potential issue (e.g. having only one slot which is not slot0 into the dt) about slots by adding a reg property corresponding to the slot id.
PATCH v5 1/4 mmc: atmel-mci: add device tree support
From: Ludovic Desroches <[email protected]>
--- .../devicetree/bindings/mmc/atmel-hsmci.txt | 67 +++++++++++++++ drivers/mmc/host/atmel-mci.c | 85 +++++++++++++++++++- 2 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 Documentation/devicetree/bindings/mmc/atmel-hsmci.txt
Documentation/devicetree/bindings/mmc/atmel-hsmci.txt new file +67 -0
@@ -0,0 +1,67 @@ +* Atmel High Speed MultiMedia Card Interface + +This controller on atmel products provides an interface for MMC, SD and SDIO +types of memory cards. + +1) MCI node + +Required properties: +- compatible: no blank "atmel,hsmci" +- reg: should contain HSMCI registers location and length +- interrupts: should contain HSMCI interrupt number +- #address-cells: should be one. The cell is the slot id. +- #size-cells: should be zero. +- at least one slot node + +The node contains child nodes for each slot that the platform uses + +Example MCI node: + +mmc0: mmc at f0008000 { + compatible = "atmel,hsmci"; + reg = <0xf0008000 0x600>; + interrupts = <12 4>; + #address-cells = <1>; + #size-cells = <0>; + + [ child node definitions...] +}; + +2) slot nodes + +Required properties: +- reg: should contain the slot id. +- bus-width: number of data lines connected to the controller + +Optional properties: +- cd-gpios: specify GPIOs for card detection +- cd-inverted: invert the value of external card detect gpio line +- wp-gpios: specify GPIOs for write protection + +Example slot node: + +slot at 0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioD 15 0> + cd-inverted; +}; + +Example full MCI node: +mmc0: mmc at f0008000 { + compatible = "atmel,hsmci"; + reg = <0xf0008000 0x600>; + interrupts = <12 4>; + #address-cells = <1>; + #size-cells = <0>; + slot at 0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioD 15 0> + cd-inverted; + }; + slot at 1 { + reg = <1>; + bus-width = <4>; + }; +};
drivers/mmc/host/atmel-mci.c +83 -2
115 lines not on this page · raw message
Signature · 1 line
1.7.5.4
PATCH v5 1/4 mmc: atmel-mci: add device tree support
Quoted 139 lines · On 17:15 Thu 24 May , [email protected] wrote:
From: Ludovic Desroches <[email protected]>
Signed-off-by Ludovic Desroches <[email protected]>--- .../devicetree/bindings/mmc/atmel-hsmci.txt | 67 +++++++++++++++ drivers/mmc/host/atmel-mci.c | 85 +++++++++++++++++++- 2 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 Documentation/devicetree/bindings/mmc/atmel-hsmci.txtDocumentation/devicetree/bindings/mmc/atmel-hsmci.txt new file +67
-0@@ -0,0 +1,67 @@ +* Atmel High Speed MultiMedia Card Interface + +This controller on atmel products provides an interface for MMC, SD and SDIO +types of memory cards. + +1) MCI node + +Required properties: +- compatible: no blank "atmel,hsmci" +- reg: should contain HSMCI registers location and length +- interrupts: should contain HSMCI interrupt number +- #address-cells: should be one. The cell is the slot id. +- #size-cells: should be zero. +- at least one slot node + +The node contains child nodes for each slot that the platform uses + +Example MCI node: + +mmc0: mmc@f0008000 { + compatible = "atmel,hsmci"; + reg = <0xf0008000 0x600>; + interrupts = <12 4>; + #address-cells = <1>; + #size-cells = <0>; + + [ child node definitions...] +}; + +2) slot nodes + +Required properties: +- reg: should contain the slot id. +- bus-width: number of data lines connected to the controller + +Optional properties: +- cd-gpios: specify GPIOs for card detection +- cd-inverted: invert the value of external card detect gpio line +- wp-gpios: specify GPIOs for write protection + +Example slot node: + +slot@0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioD 15 0> + cd-inverted; +}; + +Example full MCI node: +mmc0: mmc@f0008000 { + compatible = "atmel,hsmci"; + reg = <0xf0008000 0x600>; + interrupts = <12 4>; + #address-cells = <1>; + #size-cells = <0>; + slot@0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioD 15 0> + cd-inverted; + }; + slot@1 { + reg = <1>; + bus-width = <4>; + }; +};drivers/mmc/host/atmel-mci.c +42
-0@@ -19,6 +19,9 @@#include <linux/interrupt.h> #include <linux/ioport.h> #include <linux/module.h> +#include <linux/of.h> +#include <linux/of_device.h> +#include <linux/of_gpio.h> #include <linux/platform_device.h> #include <linux/scatterlist.h> #include <linux/seq_file.h> @@ -493,6 +496,70 @@ err:dev_err (&mmc->class_dev,"failed to initialize debugfs for slot\n" ); } +#if defined(CONFIG_OF ) +static const struct of_device_id atmci_dt_ids[] = { + { .compatible ="atmel,hsmci" }, + {/* sentinel */ } +}; + +MODULE_DEVICE_TABLE (of, atmci_dt_ids); + +static struct mci_platform_data __devinit * +atmci_of_init (struct platform_device *pdev) +{ +struct device_node *np = pdev->dev.of_node; +struct device_node *cnp; +struct mci_platform_data *pdata; +u32 slot_id; + +if (!np) { +dev_err (&pdev->dev,"device node not found\n" ); +return ERR_PTR (-EINVAL ); + } + + pdata =devm_kzalloc (&pdev->dev,sizeof (*pdata),GFP_KERNEL ); +if (!pdata) { +dev_err (&pdev->dev,"could not allocate memory for pdata\n" ); +return ERR_PTR (-ENOMEM ); + } + +for_each_child_of_node (np, cnp) { +if (of_property_read_u32 (cnp,"reg" , &slot_id)) { +dev_warn (&pdev->dev,"reg property is missing for %s\n" , + cnp->full_name); +continue ; + } + +if (slot_id >=ATMCI_MAX_NR_SLOTS ) { +dev_warn (&pdev->dev,"can't have more than %d slots\n" , +ATMCI_MAX_NR_SLOTS ); +break ; + }
drivers/mmc/host/atmel-mci.c err: · line 547
Quoted 10 lines
drivers/mmc/host/atmel-mci.c +10
-0+ +if (of_property_read_u32 (cnp,"bus-width" , + &pdata->slot[slot_id].bus_width)) + pdata->slot[slot_id].bus_width =1 ; + + pdata->slot[slot_id].detect_pin = +of_get_named_gpio (cnp,"cd-gpios" ,0 ); + + pdata->slot[slot_id].detect_is_active_high = +of_property_read_bool (cnp,"cd-inverted" );
as this is going to be removed at once
please implement the gpio active low too
otherwise
Best Regards,
J.
PATCH v5 2/4 ARM: at91: add clocks for DT entries
In reply to ludovic.desroches at atmel.comFrom: Ludovic Desroches <[email protected]>
Add clocks to clock lookup table for DT entries.
--- arch/arm/mach-at91/at91sam9260.c | 1 + arch/arm/mach-at91/at91sam9263.c | 2 ++ arch/arm/mach-at91/at91sam9g45.c | 2 ++ arch/arm/mach-at91/at91sam9n12.c | 1 + arch/arm/mach-at91/at91sam9x5.c | 2 ++ 5 files changed, 8 insertions(+), 0 deletions(-)
arch/arm/mach-at91/at91sam9260.c +1 -0
@@ -226,6 +226,7 @@ static struct clk_lookup periph_clocks_lookups[] = {CLKDEV_CON_DEV_ID ("t1_clk" ,"fffdc000.timer" , &tc4_clk),CLKDEV_CON_DEV_ID ("t2_clk" ,"fffdc000.timer" , &tc5_clk),CLKDEV_CON_DEV_ID ("hclk" ,"500000.ohci" , &ohci_clk), +CLKDEV_CON_DEV_ID ("mci_clk" ,"fffa8000.mmc" , &mmc_clk),/* fake hclk clock */ CLKDEV_CON_DEV_ID ("hclk" ,"at91_ohci" , &ohci_clk), CLKDEV_CON_ID("pioA", &pioA_clk),
arch/arm/mach-at91/at91sam9263.c +2 -0
@@ -211,6 +211,8 @@ static struct clk_lookup periph_clocks_lookups[] = {CLKDEV_CON_DEV_ID ("hclk" ,"a00000.ohci" , &ohci_clk),CLKDEV_CON_DEV_ID ("spi_clk" ,"fffa4000.spi" , &spi0_clk),CLKDEV_CON_DEV_ID ("spi_clk" ,"fffa8000.spi" , &spi1_clk), +CLKDEV_CON_DEV_ID ("mci_clk" ,"fff80000.mmc" , &mmc0_clk), + CLKDEV_CON_DEV_ID("mci_clk", "fff84000.mmc", &mmc1_clk), }; static struct clk_lookup usart_clocks_lookups[] = {
arch/arm/mach-at91/at91sam9g45.c +2 -0
@@ -242,6 +242,8 @@ static struct clk_lookup periph_clocks_lookups[] = {CLKDEV_CON_DEV_ID ("t0_clk" ,"fffd4000.timer" , &tcb0_clk),CLKDEV_CON_DEV_ID ("hclk" ,"700000.ohci" , &uhphs_clk),CLKDEV_CON_DEV_ID ("ehci_clk" ,"800000.ehci" , &uhphs_clk), +CLKDEV_CON_DEV_ID ("mci_clk" ,"fff80000.mmc" , &mmc0_clk), +CLKDEV_CON_DEV_ID ("mci_clk" ,"fffd0000.mmc" , &mmc1_clk),/* fake hclk clock */ CLKDEV_CON_DEV_ID ("hclk" ,"at91_ohci" , &uhphs_clk), CLKDEV_CON_ID("pioA", &pioA_clk),
arch/arm/mach-at91/at91sam9n12.c +1 -0
@@ -168,6 +168,7 @@ static struct clk_lookup periph_clocks_lookups[] = {CLKDEV_CON_DEV_ID ("usart" ,"f8028000.serial" , &usart3_clk),CLKDEV_CON_DEV_ID ("t0_clk" ,"f8008000.timer" , &tcb_clk),CLKDEV_CON_DEV_ID ("t0_clk" ,"f800c000.timer" , &tcb_clk), +CLKDEV_CON_DEV_ID ("mci_clk" ,"f0008000.mmc" , &mmc_clk),CLKDEV_CON_DEV_ID ("dma_clk" ,"ffffec00.dma-controller" , &dma_clk),CLKDEV_CON_ID ("pioA" , &pioAB_clk), CLKDEV_CON_ID("pioB", &pioAB_clk),
arch/arm/mach-at91/at91sam9x5.c +2 -0
@@ -231,6 +231,8 @@ static struct clk_lookup periph_clocks_lookups[] = {CLKDEV_CON_DEV_ID ("t0_clk" ,"f800c000.timer" , &tcb0_clk),CLKDEV_CON_DEV_ID ("dma_clk" ,"ffffec00.dma-controller" , &dma0_clk),CLKDEV_CON_DEV_ID ("dma_clk" ,"ffffee00.dma-controller" , &dma1_clk), +CLKDEV_CON_DEV_ID ("mci_clk" ,"f0008000.mmc" , &mmc0_clk), +CLKDEV_CON_DEV_ID ("mci_clk" ,"f000c000.mmc" , &mmc1_clk),CLKDEV_CON_ID ("pioA" , &pioAB_clk),CLKDEV_CON_ID ("pioB" , &pioAB_clk), CLKDEV_CON_ID("pioC", &pioCD_clk),
Signature · 1 line
1.7.5.4
PATCH v5 3/4 ARM: dts: add nodes for atmel hsmci controllers for atmel SOCs
In reply to ludovic.desroches at atmel.comFrom: Ludovic Desroches <[email protected]>
Add mci controller nodes to atmel SOCs.
--- arch/arm/boot/dts/at91sam9260.dtsi | 9 +++++++++ arch/arm/boot/dts/at91sam9263.dtsi | 18 ++++++++++++++++++ arch/arm/boot/dts/at91sam9g45.dtsi | 18 ++++++++++++++++++ arch/arm/boot/dts/at91sam9n12.dtsi | 9 +++++++++ arch/arm/boot/dts/at91sam9x5.dtsi | 18 ++++++++++++++++++ 5 files changed, 72 insertions(+), 0 deletions(-)
arch/arm/boot/dts/at91sam9260.dtsi +9 -0
@@ -198,6 +198,15 @@ status = "disabled"; }; + mmc0: mmc at fffa8000 { + compatible = "atmel,hsmci"; + reg = <0xfffa800 0x600>; + interrupts = <9 4>; + status = "disabled"; + #address-cells = <1>; + #size-cells = <0>; + }; + adc0: adc at fffe0000 { compatible = "atmel,at91sam9260-adc"; reg = <0xfffe0000 0x100>;
arch/arm/boot/dts/at91sam9263.dtsi +18 -0
@@ -179,6 +179,24 @@ interrupts = <24 4>; status = "disabled"; }; + + mmc0: mmc at fff80000 { + compatible = "atmel,hsmci"; + reg = <0xfff80000 0x600>; + interrupts = <10 4>; + status = "disabled"; + #address-cells = <1>; + #size-cells = <0>; + }; + + mmc1: mmc at fff84000 { + compatible = "atmel,hsmci"; + reg = <0xfff84000 0x600>; + interrupts = <11 4>; + status = "disabled"; + #address-cells = <1>; + #size-cells = <0>; + }; }; nand0: nand at 40000000 {
arch/arm/boot/dts/at91sam9g45.dtsi +18 -0
@@ -236,6 +236,24 @@ trigger-value = <0x6>; }; }; + + mmc0: mmc at fff80000 { + compatible = "atmel,hsmci"; + reg = <0xfff80000 0x600>; + interrupts = <11 4>; + status = "disabled"; + #address-cells = <1>; + #size-cells = <0>; + }; + + mmc1: mmc at fffd0000 { + compatible = "atmel,hsmci"; + reg = <0xfffd0000 0x600>; + interrupts = <29 4>; + status = "disabled"; + #address-cells = <1>; + #size-cells = <0>; + }; }; nand0: nand at 40000000 {
arch/arm/boot/dts/at91sam9n12.dtsi +9 -0
@@ -82,6 +82,15 @@ reg = <0xfffffe10 0x10>; }; + mmc0: mmc at f0008000 { + compatible = "atmel,hsmci"; + reg = <0xf0008000 0x600>; + interrupts = <12 4>; + status = "disabled"; + #address-cells = <1>; + #size-cells = <0>; + }; + tcb0: timer at f8008000 { compatible = "atmel,at91sam9x5-tcb"; reg = <0xf8008000 0x100>;
arch/arm/boot/dts/at91sam9x5.dtsi +18 -0
@@ -228,6 +228,24 @@ trigger-value = <0x6>; }; }; + + mmc0: mmc at f0008000 { + compatible = "atmel,hsmci"; + reg = <0xf0008000 0x600>; + interrupts = <12 4>; + status = "disabled"; + #address-cells = <1>; + #size-cells = <0>; + }; + + mmc1: mmc at f000c000 { + compatible = "atmel,hsmci"; + reg = <0xf000c000 0x600>; + interrupts = <26 4>; + status = "disabled"; + #address-cells = <1>; + #size-cells = <0>; + }; }; nand0: nand at 40000000 {
Signature · 1 line
1.7.5.4
PATCH v5 3/4 ARM: dts: add nodes for atmel hsmci controllers for atmel SOCs
Quoted 5 lines · ludovic.desroches at atmel.com
From: Ludovic Desroches <[email protected]>
Add mci controller nodes to atmel SOCs.
Signed-off-by Ludovic Desroches <[email protected]>
Best Regards,
J.
PATCH v5 4/4 ARM: dts: add nodes for atmel hsmci controllers for atmel boards
In reply to ludovic.desroches at atmel.comFrom: Ludovic Desroches <[email protected]>
Add mci controller nodes to atmel boards.
--- arch/arm/boot/dts/at91sam9263ek.dts | 10 ++++++++++ arch/arm/boot/dts/at91sam9g20ek_2mmc.dts | 12 ++++++++++++ arch/arm/boot/dts/at91sam9g20ek_common.dtsi | 9 +++++++++ arch/arm/boot/dts/at91sam9g25ek.dts | 18 ++++++++++++++++++ arch/arm/boot/dts/at91sam9m10g45ek.dts | 19 +++++++++++++++++++ arch/arm/boot/dts/at91sam9n12ek.dts | 9 +++++++++ 6 files changed, 77 insertions(+), 0 deletions(-)
arch/arm/boot/dts/at91sam9263ek.dts +10 -0
@@ -50,6 +50,16 @@ atmel,vbus-gpio = <&pioA 25 0>; status = "okay"; }; + + mmc0: mmc at fff80000 { + status = "okay"; + slot at 0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioE 18 0>; + wp-gpios = <&pioE 19 0>; + }; + }; }; nand0: nand at 40000000 {
arch/arm/boot/dts/at91sam9g20ek_2mmc.dts +12 -0
@@ -12,6 +12,18 @@ model = "Atmel at91sam9g20ek 2 mmc"; compatible = "atmel,at91sam9g20ek_2mmc", "atmel,at91sam9g20", "atmel,at91sam9"; + ahb { + apb{ + mmc0: mmc at fffa8000 { + slot at 0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioC 2 0>; + }; + }; + }; + }; + leds { compatible = "gpio-leds";
arch/arm/boot/dts/at91sam9g20ek_common.dtsi +9 -0
@@ -51,6 +51,15 @@ atmel,vbus-gpio = <&pioC 5 0>; status = "okay"; }; + + mmc0: mmc at fffa8000 { + status = "okay"; + slot at 1 { + reg = <1>; + bus-width = <4>; + cd-gpios = <&pioC 9 0>; + }; + }; }; nand0: nand at 40000000 {
arch/arm/boot/dts/at91sam9g25ek.dts +18 -0
@@ -32,6 +32,24 @@ phy-mode = "rmii"; status = "okay"; }; + + mmc0: mmc at f0008000 { + status = "okay"; + slot at 0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioD 15 0>; + }; + }; + + mmc1: mmc at f000c000 { + status = "okay"; + slot at 0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioD 14 0>; + }; + }; }; usb0: ohci at 00600000 {
arch/arm/boot/dts/at91sam9m10g45ek.dts +19 -0
@@ -46,6 +46,25 @@ phy-mode = "rmii"; status = "okay"; }; + + mmc0: mmc at fff80000 { + status = "okay"; + slot at 0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioD 10 0>; + }; + }; + + mmc1: mmc at fffd0000 { + status = "okay"; + slot at 0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioD 11 0>; + wp-gpios = <&pioD 29 0>; + }; + }; }; nand0: nand at 40000000 {
arch/arm/boot/dts/at91sam9n12ek.dts +9 -0
@@ -37,6 +37,15 @@ dbgu: serial at fffff200 { status = "okay"; }; + + mmc0: mmc at f0008000 { + status = "okay"; + slot at 0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioA 7 0>; + }; + }; }; nand0: nand at 40000000 {
Signature · 1 line
1.7.5.4
PATCH v5 4/4 ARM: dts: add nodes for atmel hsmci controllers for atmel boards
Quoted 5 lines · On 17:15 Thu 24 May , [email protected] wrote:
From: Ludovic Desroches <[email protected]>
Add mci controller nodes to atmel boards.
Signed-off-by Ludovic Desroches <[email protected]>
Best Regards,
J.