* [PATCH v5 0/4] Add DT support for davinci_mmc driver
@ 2013-03-12 14:13 Manjunathappa, Prakash
2013-03-12 14:13 ` [PATCH v5 1/4] ARM: davinci: mmc: derive version information from device name Manjunathappa, Prakash
` (4 more replies)
0 siblings, 5 replies; 9+ messages in thread
From: Manjunathappa, Prakash @ 2013-03-12 14:13 UTC (permalink / raw)
To: linux-arm-kernel
Patch set adds DT support for davinci_mmc driver and is
verified on da850-evm without card_detect/write_protect and
EDMA support. Also takecare to derive controller IP version from
platform_device_id table, remove version specification in pdata.
Applies on top of below patch under community review:
"Enable SPI flash support on da850-evm DT kernel"
http://www.spinics.net/lists/arm-kernel/msg229328.html
Depends on patch waiting for acceptance:
Patch "mmc: davinci: allow driver to work without DMA resource"
http://www.mail-archive.com/linux-mmc at vger.kernel.org/msg18771.html
Since v4:
Minor nit, check on return value for failure of max-frequency property
parsing.
Merged patch "ARM: davinci: mmc: derive version information from device name"
with patch 1/4.
Since v3:
Added support to derive IP version information from platform_device_id table.
Since v2:
Modified the default value for bus-width and skipping the property specifications
for highspeed card capabilties for now. Re-ordered patch 2 and 3.
Since v1:
Modified the DT parse function to take default values, updated DT binding
documentation accordingly.
Manjunathappa, Prakash (4):
ARM: davinci: mmc: derive version information from device name
mmc: davinci_mmc: add DT support
ARM: davinci: da850: add mmc DT entries
ARM: davinci: da850: override mmc DT node device name
.../devicetree/bindings/mmc/davinci_mmc.txt | 25 ++++++
arch/arm/boot/dts/da850-evm.dts | 7 ++
arch/arm/boot/dts/da850.dtsi | 15 ++++
arch/arm/mach-davinci/board-da830-evm.c | 1 -
arch/arm/mach-davinci/board-da850-evm.c | 2 -
arch/arm/mach-davinci/board-dm355-evm.c | 1 -
arch/arm/mach-davinci/board-dm365-evm.c | 1 -
arch/arm/mach-davinci/board-dm644x-evm.c | 1 -
arch/arm/mach-davinci/board-neuros-osd2.c | 1 -
arch/arm/mach-davinci/board-omapl138-hawk.c | 1 -
arch/arm/mach-davinci/board-tnetv107x-evm.c | 1 -
arch/arm/mach-davinci/da830.c | 2 +-
arch/arm/mach-davinci/da850.c | 4 +-
arch/arm/mach-davinci/da8xx-dt.c | 2 +
arch/arm/mach-davinci/devices-da8xx.c | 4 +-
arch/arm/mach-davinci/devices-tnetv107x.c | 4 +-
arch/arm/mach-davinci/devices.c | 6 +-
arch/arm/mach-davinci/dm355.c | 4 +-
arch/arm/mach-davinci/dm365.c | 4 +-
arch/arm/mach-davinci/dm644x.c | 2 +-
arch/arm/mach-davinci/tnetv107x.c | 4 +-
drivers/mmc/host/davinci_mmc.c | 82 +++++++++++++++++++-
include/linux/platform_data/mmc-davinci.h | 3 -
23 files changed, 146 insertions(+), 31 deletions(-)
create mode 100644 Documentation/devicetree/bindings/mmc/davinci_mmc.txt
--
1.7.4.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v5 1/4] ARM: davinci: mmc: derive version information from device name
2013-03-12 14:13 [PATCH v5 0/4] Add DT support for davinci_mmc driver Manjunathappa, Prakash
@ 2013-03-12 14:13 ` Manjunathappa, Prakash
2013-03-14 11:08 ` Sekhar Nori
2013-03-12 14:13 ` [PATCH v5 2/4] mmc: davinci_mmc: add DT support Manjunathappa, Prakash
` (3 subsequent siblings)
4 siblings, 1 reply; 9+ messages in thread
From: Manjunathappa, Prakash @ 2013-03-12 14:13 UTC (permalink / raw)
To: linux-arm-kernel
Remove specifying mmc controller IP version information via platform
data, instead specify device name so that driver derives it from
platform_device_id table. Also change the clock node name to match
the changed dev_id.
Tested on da850-evm to make sure driver loads without clk_get failures.
Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
Reviewed-by: Sekhar Nori <nsekhar@ti.com>
---
Since v4:
Minor nit, check on return value for failure of max-frequency property
parsing.
Merged patch "ARM: davinci: mmc: derive version information from device name"
with this patch
arch/arm/mach-davinci/board-da830-evm.c | 1 -
arch/arm/mach-davinci/board-da850-evm.c | 2 --
arch/arm/mach-davinci/board-dm355-evm.c | 1 -
arch/arm/mach-davinci/board-dm365-evm.c | 1 -
arch/arm/mach-davinci/board-dm644x-evm.c | 1 -
arch/arm/mach-davinci/board-neuros-osd2.c | 1 -
arch/arm/mach-davinci/board-omapl138-hawk.c | 1 -
arch/arm/mach-davinci/board-tnetv107x-evm.c | 1 -
arch/arm/mach-davinci/da830.c | 2 +-
arch/arm/mach-davinci/da850.c | 4 ++--
arch/arm/mach-davinci/devices-da8xx.c | 4 ++--
arch/arm/mach-davinci/devices-tnetv107x.c | 4 ++--
arch/arm/mach-davinci/devices.c | 6 ++++--
arch/arm/mach-davinci/dm355.c | 4 ++--
arch/arm/mach-davinci/dm365.c | 4 ++--
arch/arm/mach-davinci/dm644x.c | 2 +-
arch/arm/mach-davinci/tnetv107x.c | 4 ++--
drivers/mmc/host/davinci_mmc.c | 18 +++++++++++++++++-
include/linux/platform_data/mmc-davinci.h | 3 ---
19 files changed, 35 insertions(+), 29 deletions(-)
diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c
index 95b5e10..d6a41f0 100644
--- a/arch/arm/mach-davinci/board-da830-evm.c
+++ b/arch/arm/mach-davinci/board-da830-evm.c
@@ -246,7 +246,6 @@ static struct davinci_mmc_config da830_evm_mmc_config = {
.wires = 8,
.max_freq = 50000000,
.caps = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
- .version = MMC_CTLR_VERSION_2,
};
static inline void da830_evm_init_mmc(void)
diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
index 0299915..ff0dfd6 100644
--- a/arch/arm/mach-davinci/board-da850-evm.c
+++ b/arch/arm/mach-davinci/board-da850-evm.c
@@ -802,7 +802,6 @@ static struct davinci_mmc_config da850_mmc_config = {
.wires = 4,
.max_freq = 50000000,
.caps = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
- .version = MMC_CTLR_VERSION_2,
};
static const short da850_evm_mmcsd0_pins[] __initconst = {
@@ -1362,7 +1361,6 @@ static struct davinci_mmc_config da850_wl12xx_mmc_config = {
.max_freq = 25000000,
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_NONREMOVABLE |
MMC_CAP_POWER_OFF_CARD,
- .version = MMC_CTLR_VERSION_2,
};
static const short da850_wl12xx_pins[] __initconst = {
diff --git a/arch/arm/mach-davinci/board-dm355-evm.c b/arch/arm/mach-davinci/board-dm355-evm.c
index cdf8d07..2caa5e9 100644
--- a/arch/arm/mach-davinci/board-dm355-evm.c
+++ b/arch/arm/mach-davinci/board-dm355-evm.c
@@ -280,7 +280,6 @@ static struct davinci_mmc_config dm355evm_mmc_config = {
.wires = 4,
.max_freq = 50000000,
.caps = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
- .version = MMC_CTLR_VERSION_1,
};
/* Don't connect anything to J10 unless you're only using USB host
diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c
index 5d49c75..ba06295 100644
--- a/arch/arm/mach-davinci/board-dm365-evm.c
+++ b/arch/arm/mach-davinci/board-dm365-evm.c
@@ -253,7 +253,6 @@ static struct davinci_mmc_config dm365evm_mmc_config = {
.wires = 4,
.max_freq = 50000000,
.caps = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
- .version = MMC_CTLR_VERSION_2,
};
static void dm365evm_emac_configure(void)
diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c
index f5e018d..4a57280 100644
--- a/arch/arm/mach-davinci/board-dm644x-evm.c
+++ b/arch/arm/mach-davinci/board-dm644x-evm.c
@@ -570,7 +570,6 @@ static struct davinci_mmc_config dm6446evm_mmc_config = {
.get_cd = dm6444evm_mmc_get_cd,
.get_ro = dm6444evm_mmc_get_ro,
.wires = 4,
- .version = MMC_CTLR_VERSION_1
};
static struct i2c_board_info __initdata i2c_info[] = {
diff --git a/arch/arm/mach-davinci/board-neuros-osd2.c b/arch/arm/mach-davinci/board-neuros-osd2.c
index 3e3e3af..bad8192 100644
--- a/arch/arm/mach-davinci/board-neuros-osd2.c
+++ b/arch/arm/mach-davinci/board-neuros-osd2.c
@@ -164,7 +164,6 @@ static void __init davinci_ntosd2_map_io(void)
static struct davinci_mmc_config davinci_ntosd2_mmc_config = {
.wires = 4,
- .version = MMC_CTLR_VERSION_1
};
diff --git a/arch/arm/mach-davinci/board-omapl138-hawk.c b/arch/arm/mach-davinci/board-omapl138-hawk.c
index dc1208e..4331ff3 100644
--- a/arch/arm/mach-davinci/board-omapl138-hawk.c
+++ b/arch/arm/mach-davinci/board-omapl138-hawk.c
@@ -138,7 +138,6 @@ static struct davinci_mmc_config da850_mmc_config = {
.wires = 4,
.max_freq = 50000000,
.caps = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
- .version = MMC_CTLR_VERSION_2,
};
static __init void omapl138_hawk_mmc_init(void)
diff --git a/arch/arm/mach-davinci/board-tnetv107x-evm.c b/arch/arm/mach-davinci/board-tnetv107x-evm.c
index be30997..42066ed 100644
--- a/arch/arm/mach-davinci/board-tnetv107x-evm.c
+++ b/arch/arm/mach-davinci/board-tnetv107x-evm.c
@@ -85,7 +85,6 @@ static struct davinci_mmc_config mmc_config = {
.wires = 4,
.max_freq = 50000000,
.caps = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
- .version = MMC_CTLR_VERSION_1,
};
static const short sdio1_pins[] __initconst = {
diff --git a/arch/arm/mach-davinci/da830.c b/arch/arm/mach-davinci/da830.c
index 678a54a..42ad1ab 100644
--- a/arch/arm/mach-davinci/da830.c
+++ b/arch/arm/mach-davinci/da830.c
@@ -394,7 +394,7 @@ static struct clk_lookup da830_clks[] = {
CLK(NULL, "tpcc", &tpcc_clk),
CLK(NULL, "tptc0", &tptc0_clk),
CLK(NULL, "tptc1", &tptc1_clk),
- CLK("davinci_mmc.0", NULL, &mmcsd_clk),
+ CLK("davinci-mmc-da830.0", NULL, &mmcsd_clk),
CLK(NULL, "uart0", &uart0_clk),
CLK(NULL, "uart1", &uart1_clk),
CLK(NULL, "uart2", &uart2_clk),
diff --git a/arch/arm/mach-davinci/da850.c b/arch/arm/mach-davinci/da850.c
index 6b9154e..364f61d 100644
--- a/arch/arm/mach-davinci/da850.c
+++ b/arch/arm/mach-davinci/da850.c
@@ -404,8 +404,8 @@ static struct clk_lookup da850_clks[] = {
CLK("davinci_emac.1", NULL, &emac_clk),
CLK("davinci-mcasp.0", NULL, &mcasp_clk),
CLK("da8xx_lcdc.0", "fck", &lcdc_clk),
- CLK("davinci_mmc.0", NULL, &mmcsd0_clk),
- CLK("davinci_mmc.1", NULL, &mmcsd1_clk),
+ CLK("davinci-mmc-da830.0", NULL, &mmcsd0_clk),
+ CLK("davinci-mmc-da830.1", NULL, &mmcsd1_clk),
CLK(NULL, "aemif", &aemif_clk),
CLK(NULL, "usb11", &usb11_clk),
CLK(NULL, "usb20", &usb20_clk),
diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
index cc6916d..3f27600 100644
--- a/arch/arm/mach-davinci/devices-da8xx.c
+++ b/arch/arm/mach-davinci/devices-da8xx.c
@@ -664,7 +664,7 @@ static struct resource da8xx_mmcsd0_resources[] = {
};
static struct platform_device da8xx_mmcsd0_device = {
- .name = "davinci_mmc",
+ .name = "davinci-mmc-da830",
.id = 0,
.num_resources = ARRAY_SIZE(da8xx_mmcsd0_resources),
.resource = da8xx_mmcsd0_resources,
@@ -701,7 +701,7 @@ static struct resource da850_mmcsd1_resources[] = {
};
static struct platform_device da850_mmcsd1_device = {
- .name = "davinci_mmc",
+ .name = "davinci-mmc-da830",
.id = 1,
.num_resources = ARRAY_SIZE(da850_mmcsd1_resources),
.resource = da850_mmcsd1_resources,
diff --git a/arch/arm/mach-davinci/devices-tnetv107x.c b/arch/arm/mach-davinci/devices-tnetv107x.c
index 773ab07..0eda4d1 100644
--- a/arch/arm/mach-davinci/devices-tnetv107x.c
+++ b/arch/arm/mach-davinci/devices-tnetv107x.c
@@ -218,7 +218,7 @@ static u64 mmc1_dma_mask = DMA_BIT_MASK(32);
static struct platform_device mmc_devices[2] = {
{
- .name = "davinci_mmc",
+ .name = "davinci-mmc-dm355",
.id = 0,
.dev = {
.dma_mask = &mmc0_dma_mask,
@@ -228,7 +228,7 @@ static struct platform_device mmc_devices[2] = {
.resource = mmc0_resources
},
{
- .name = "davinci_mmc",
+ .name = "davinci-mmc-dm355",
.id = 1,
.dev = {
.dma_mask = &mmc1_dma_mask,
diff --git a/arch/arm/mach-davinci/devices.c b/arch/arm/mach-davinci/devices.c
index 4c48a36..92411b2 100644
--- a/arch/arm/mach-davinci/devices.c
+++ b/arch/arm/mach-davinci/devices.c
@@ -150,7 +150,7 @@ static struct resource mmcsd0_resources[] = {
};
static struct platform_device davinci_mmcsd0_device = {
- .name = "davinci_mmc",
+ .name = "davinci-mmc-dm355",
.id = 0,
.dev = {
.dma_mask = &mmcsd0_dma_mask,
@@ -187,7 +187,7 @@ static struct resource mmcsd1_resources[] = {
};
static struct platform_device davinci_mmcsd1_device = {
- .name = "davinci_mmc",
+ .name = "davinci-mmc-dm355",
.id = 1,
.dev = {
.dma_mask = &mmcsd1_dma_mask,
@@ -235,6 +235,7 @@ void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config)
mmcsd1_resources[0].end = DM365_MMCSD1_BASE +
SZ_4K - 1;
mmcsd1_resources[2].start = IRQ_DM365_SDIOINT1;
+ davinci_mmcsd1_device.name = "davinci-mmc-da830";
} else
break;
@@ -256,6 +257,7 @@ void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config)
mmcsd0_resources[0].end = DM365_MMCSD0_BASE +
SZ_4K - 1;
mmcsd0_resources[2].start = IRQ_DM365_SDIOINT0;
+ davinci_mmcsd0_device.name = "davinci-mmc-da830";
} else if (cpu_is_davinci_dm644x()) {
/* REVISIT: should this be in board-init code? */
/* Power-on 3.3V IO cells */
diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c
index b49c3b7..ed3e79a 100644
--- a/arch/arm/mach-davinci/dm355.c
+++ b/arch/arm/mach-davinci/dm355.c
@@ -361,8 +361,8 @@ static struct clk_lookup dm355_clks[] = {
CLK("i2c_davinci.1", NULL, &i2c_clk),
CLK("davinci-mcbsp.0", NULL, &asp0_clk),
CLK("davinci-mcbsp.1", NULL, &asp1_clk),
- CLK("davinci_mmc.0", NULL, &mmcsd0_clk),
- CLK("davinci_mmc.1", NULL, &mmcsd1_clk),
+ CLK("davinci-mmc-dm355.0", NULL, &mmcsd0_clk),
+ CLK("davinci-mmc-dm355.1", NULL, &mmcsd1_clk),
CLK("spi_davinci.0", NULL, &spi0_clk),
CLK("spi_davinci.1", NULL, &spi1_clk),
CLK("spi_davinci.2", NULL, &spi2_clk),
diff --git a/arch/arm/mach-davinci/dm365.c b/arch/arm/mach-davinci/dm365.c
index 6c39805..3f46b24 100644
--- a/arch/arm/mach-davinci/dm365.c
+++ b/arch/arm/mach-davinci/dm365.c
@@ -454,8 +454,8 @@ static struct clk_lookup dm365_clks[] = {
CLK(NULL, "uart0", &uart0_clk),
CLK(NULL, "uart1", &uart1_clk),
CLK("i2c_davinci.1", NULL, &i2c_clk),
- CLK("davinci_mmc.0", NULL, &mmcsd0_clk),
- CLK("davinci_mmc.1", NULL, &mmcsd1_clk),
+ CLK("davinci-mmc-da830.0", NULL, &mmcsd0_clk),
+ CLK("davinci-mmc-da830.1", NULL, &mmcsd1_clk),
CLK("spi_davinci.0", NULL, &spi0_clk),
CLK("spi_davinci.1", NULL, &spi1_clk),
CLK("spi_davinci.2", NULL, &spi2_clk),
diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c
index 11c79a3..5e1e502 100644
--- a/arch/arm/mach-davinci/dm644x.c
+++ b/arch/arm/mach-davinci/dm644x.c
@@ -310,7 +310,7 @@ static struct clk_lookup dm644x_clks[] = {
CLK("i2c_davinci.1", NULL, &i2c_clk),
CLK("palm_bk3710", NULL, &ide_clk),
CLK("davinci-mcbsp", NULL, &asp_clk),
- CLK("davinci_mmc.0", NULL, &mmcsd_clk),
+ CLK("davinci-mmc-dm355.0", NULL, &mmcsd_clk),
CLK(NULL, "spi", &spi_clk),
CLK(NULL, "gpio", &gpio_clk),
CLK(NULL, "usb", &usb_clk),
diff --git a/arch/arm/mach-davinci/tnetv107x.c b/arch/arm/mach-davinci/tnetv107x.c
index dc1a209..f9b9399 100644
--- a/arch/arm/mach-davinci/tnetv107x.c
+++ b/arch/arm/mach-davinci/tnetv107x.c
@@ -272,7 +272,7 @@ static struct clk_lookup clks[] = {
CLK("tnetv107x-keypad.0", NULL, &clk_keypad),
CLK(NULL, "clk_gpio", &clk_gpio),
CLK(NULL, "clk_mdio", &clk_mdio),
- CLK("davinci_mmc.0", NULL, &clk_sdio0),
+ CLK("davinci-mmc-dm355.0", NULL, &clk_sdio0),
CLK(NULL, "uart0", &clk_uart0),
CLK(NULL, "uart1", &clk_uart1),
CLK(NULL, "timer0", &clk_timer0),
@@ -292,7 +292,7 @@ static struct clk_lookup clks[] = {
CLK(NULL, "clk_system", &clk_system),
CLK(NULL, "clk_imcop", &clk_imcop),
CLK(NULL, "clk_spare", &clk_spare),
- CLK("davinci_mmc.1", NULL, &clk_sdio1),
+ CLK("davinci-mmc-dm355.1", NULL, &clk_sdio1),
CLK(NULL, "clk_ddr2_vrst", &clk_ddr2_vrst),
CLK(NULL, "clk_ddr2_vctl_rst", &clk_ddr2_vctl_rst),
CLK(NULL, NULL, NULL),
diff --git a/drivers/mmc/host/davinci_mmc.c b/drivers/mmc/host/davinci_mmc.c
index 27123f8..50e9782 100644
--- a/drivers/mmc/host/davinci_mmc.c
+++ b/drivers/mmc/host/davinci_mmc.c
@@ -1157,6 +1157,18 @@ static void __init init_mmcsd_host(struct mmc_davinci_host *host)
mmc_davinci_reset_ctrl(host, 0);
}
+static struct platform_device_id davinci_mmc_devtype[] = {
+ {
+ .name = "davinci-mmc-dm355",
+ .driver_data = MMC_CTLR_VERSION_1,
+ }, {
+ .name = "davinci-mmc-da830",
+ .driver_data = MMC_CTLR_VERSION_2,
+ },
+ {},
+};
+MODULE_DEVICE_TABLE(platform, davinci_mmc_devtype);
+
static int __init davinci_mmcsd_probe(struct platform_device *pdev)
{
struct davinci_mmc_config *pdata = pdev->dev.platform_data;
@@ -1165,6 +1177,7 @@ static int __init davinci_mmcsd_probe(struct platform_device *pdev)
struct resource *r, *mem = NULL;
int ret = 0, irq = 0;
size_t mem_size;
+ const struct platform_device_id *id_entry;
/* REVISIT: when we're fully converted, fail if pdata is NULL */
@@ -1239,7 +1252,9 @@ static int __init davinci_mmcsd_probe(struct platform_device *pdev)
if (pdata && (pdata->wires == 8))
mmc->caps |= (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA);
- host->version = pdata->version;
+ id_entry = platform_get_device_id(pdev);
+ if (id_entry)
+ host->version = id_entry->driver_data;
mmc->ops = &mmc_davinci_ops;
mmc->f_min = 312500;
@@ -1410,6 +1425,7 @@ static struct platform_driver davinci_mmcsd_driver = {
.pm = davinci_mmcsd_pm_ops,
},
.remove = __exit_p(davinci_mmcsd_remove),
+ .id_table = davinci_mmc_devtype,
};
static int __init davinci_mmcsd_init(void)
diff --git a/include/linux/platform_data/mmc-davinci.h b/include/linux/platform_data/mmc-davinci.h
index 5ba6b22..9cea4ee 100644
--- a/include/linux/platform_data/mmc-davinci.h
+++ b/include/linux/platform_data/mmc-davinci.h
@@ -23,9 +23,6 @@ struct davinci_mmc_config {
/* any additional host capabilities: OR'd in to mmc->f_caps */
u32 caps;
- /* Version of the MMC/SD controller */
- u8 version;
-
/* Number of sg segments */
u8 nr_sg;
};
--
1.7.4.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 2/4] mmc: davinci_mmc: add DT support
2013-03-12 14:13 [PATCH v5 0/4] Add DT support for davinci_mmc driver Manjunathappa, Prakash
2013-03-12 14:13 ` [PATCH v5 1/4] ARM: davinci: mmc: derive version information from device name Manjunathappa, Prakash
@ 2013-03-12 14:13 ` Manjunathappa, Prakash
2013-03-12 14:13 ` [PATCH v5 3/4] ARM: davinci: da850: add mmc DT entries Manjunathappa, Prakash
` (2 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Manjunathappa, Prakash @ 2013-03-12 14:13 UTC (permalink / raw)
To: linux-arm-kernel
Adds device tree support for davinci_mmc. Also add binding documentation.
As of now in non-dma PIO mode and without GPIO card_detect/write_protect
option because of dependencies on EDMA and GPIO module DT support.
Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
Reviewed-by: Mark Rutland <mark.rutland@arm.com>
Cc: linux-mmc at vger.kernel.org
Cc: linux-arm-kernel at lists.infradead.org
Cc: davinci-linux-open-source at linux.davincidsp.com
Cc: devicetree-discuss at lists.ozlabs.org
Cc: cjb at laptop.org
Cc: Sekhar Nori <nsekhar@ti.com>
Cc: mporter at ti.com
---
.../devicetree/bindings/mmc/davinci_mmc.txt | 25 ++++++++
drivers/mmc/host/davinci_mmc.c | 64 +++++++++++++++++++-
2 files changed, 87 insertions(+), 2 deletions(-)
create mode 100644 Documentation/devicetree/bindings/mmc/davinci_mmc.txt
diff --git a/Documentation/devicetree/bindings/mmc/davinci_mmc.txt b/Documentation/devicetree/bindings/mmc/davinci_mmc.txt
new file mode 100644
index 0000000..247be0f
--- /dev/null
+++ b/Documentation/devicetree/bindings/mmc/davinci_mmc.txt
@@ -0,0 +1,25 @@
+* TI Highspeed MMC host controller for DaVinci
+
+The Highspeed MMC Host Controller on TI DaVinci family
+provides an interface for MMC, SD and SDIO types of memory cards.
+
+This file documents the properties used by the davinci_mmc driver.
+
+Required properties:
+- compatible:
+ Should be "ti,davinci-mmc-da830": for da830, da850, dm365
+ Should be "ti,davinci-mmc-dm355": for dm355, dm644x
+
+Optional properties:
+- bus-width: Number of data lines, can be <1>, <4>, or <8>, default <1>
+- max-frequency: Maximum operating clock frequency, default 25MHz.
+
+Example:
+ mmc0: mmc at 1c40000 {
+ compatible = "ti,davinci-mmc-da830",
+ reg = <0x40000 0x1000>;
+ interrupts = <16>;
+ status = "okay";
+ bus-width = <4>;
+ max-frequency = <50000000>;
+ };
diff --git a/drivers/mmc/host/davinci_mmc.c b/drivers/mmc/host/davinci_mmc.c
index 50e9782..8819d25 100644
--- a/drivers/mmc/host/davinci_mmc.c
+++ b/drivers/mmc/host/davinci_mmc.c
@@ -34,6 +34,8 @@
#include <linux/dma-mapping.h>
#include <linux/edma.h>
#include <linux/mmc/mmc.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
#include <linux/platform_data/mmc-davinci.h>
@@ -1169,9 +1171,62 @@ static struct platform_device_id davinci_mmc_devtype[] = {
};
MODULE_DEVICE_TABLE(platform, davinci_mmc_devtype);
-static int __init davinci_mmcsd_probe(struct platform_device *pdev)
+static const struct of_device_id davinci_mmc_dt_ids[] = {
+ {
+ .compatible = "ti,davinci-mmc-dm355",
+ .data = &davinci_mmc_devtype[MMC_CTLR_VERSION_1],
+ },
+ {
+ .compatible = "ti,davinci-mmc-da830",
+ .data = &davinci_mmc_devtype[MMC_CTLR_VERSION_2],
+ },
+ {},
+};
+MODULE_DEVICE_TABLE(of, davinci_mmc_dt_ids);
+
+static struct davinci_mmc_config
+ *mmc_parse_pdata(struct platform_device *pdev)
{
+ struct device_node *np;
struct davinci_mmc_config *pdata = pdev->dev.platform_data;
+ const struct of_device_id *match =
+ of_match_device(of_match_ptr(davinci_mmc_dt_ids), &pdev->dev);
+ u32 data;
+
+ np = pdev->dev.of_node;
+ if (!np)
+ return pdata;
+
+ pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
+ if (!pdata) {
+ dev_err(&pdev->dev, "Failed to allocate memory for struct davinci_mmc_config\n");
+ goto nodata;
+ }
+
+ if (match)
+ pdev->id_entry = match->data;
+
+ if (of_property_read_u32(np, "max-frequency", &pdata->max_freq))
+ dev_info(&pdev->dev, "'max-frequency' property not specified, defaulting to 25MHz\n");
+
+ of_property_read_u32(np, "bus-width", &data);
+ switch (data) {
+ case 1:
+ case 4:
+ case 8:
+ pdata->wires = data;
+ break;
+ default:
+ pdata->wires = 1;
+ dev_info(&pdev->dev, "Unsupported buswidth, defaulting to 1 bit\n");
+ }
+nodata:
+ return pdata;
+}
+
+static int __init davinci_mmcsd_probe(struct platform_device *pdev)
+{
+ struct davinci_mmc_config *pdata = NULL;
struct mmc_davinci_host *host = NULL;
struct mmc_host *mmc = NULL;
struct resource *r, *mem = NULL;
@@ -1179,7 +1234,11 @@ static int __init davinci_mmcsd_probe(struct platform_device *pdev)
size_t mem_size;
const struct platform_device_id *id_entry;
- /* REVISIT: when we're fully converted, fail if pdata is NULL */
+ pdata = mmc_parse_pdata(pdev);
+ if (pdata == NULL) {
+ dev_err(&pdev->dev, "Can not get platform data\n");
+ return -ENOENT;
+ }
ret = -ENODEV;
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -1423,6 +1482,7 @@ static struct platform_driver davinci_mmcsd_driver = {
.name = "davinci_mmc",
.owner = THIS_MODULE,
.pm = davinci_mmcsd_pm_ops,
+ .of_match_table = of_match_ptr(davinci_mmc_dt_ids),
},
.remove = __exit_p(davinci_mmcsd_remove),
.id_table = davinci_mmc_devtype,
--
1.7.4.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 3/4] ARM: davinci: da850: add mmc DT entries
2013-03-12 14:13 [PATCH v5 0/4] Add DT support for davinci_mmc driver Manjunathappa, Prakash
2013-03-12 14:13 ` [PATCH v5 1/4] ARM: davinci: mmc: derive version information from device name Manjunathappa, Prakash
2013-03-12 14:13 ` [PATCH v5 2/4] mmc: davinci_mmc: add DT support Manjunathappa, Prakash
@ 2013-03-12 14:13 ` Manjunathappa, Prakash
2013-03-12 14:13 ` [PATCH v5 4/4] ARM: davinci: da850: override mmc DT node device name Manjunathappa, Prakash
2013-03-14 11:55 ` [PATCH v5 0/4] Add DT support for davinci_mmc driver Sekhar Nori
4 siblings, 0 replies; 9+ messages in thread
From: Manjunathappa, Prakash @ 2013-03-12 14:13 UTC (permalink / raw)
To: linux-arm-kernel
Add DT entry for MMC. Also add entry for pinmux information.
Tested:
1) Without GPIO card detection and EDMA support as DT support for
GPIO and EDMA are yet come.
2) By creating/deleting files and mounting/unmounting the partition.
Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
Cc: linux-mmc at vger.kernel.org
Cc: linux-arm-kernel at lists.infradead.org
Cc: linux-kernel at vger.kernel.org
Cc: davinci-linux-open-source at linux.davincidsp.com
Cc: devicetree-discuss at lists.ozlabs.org
Cc: cjb at laptop.org
Cc: Sekhar Nori <nsekhar@ti.com>
---
arch/arm/boot/dts/da850-evm.dts | 7 +++++++
arch/arm/boot/dts/da850.dtsi | 15 +++++++++++++++
2 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/arch/arm/boot/dts/da850-evm.dts b/arch/arm/boot/dts/da850-evm.dts
index fe2bbe7..bc1f951 100644
--- a/arch/arm/boot/dts/da850-evm.dts
+++ b/arch/arm/boot/dts/da850-evm.dts
@@ -81,6 +81,13 @@
};
};
};
+ mmc0: mmc at 1c40000 {
+ max-frequency = <50000000>;
+ bus-width = <4>;
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc0_pins>;
+ };
};
nand_cs3 at 62000000 {
status = "okay";
diff --git a/arch/arm/boot/dts/da850.dtsi b/arch/arm/boot/dts/da850.dtsi
index 327fb06..142382d 100644
--- a/arch/arm/boot/dts/da850.dtsi
+++ b/arch/arm/boot/dts/da850.dtsi
@@ -70,6 +70,15 @@
0x14 0x00111111 0x00ffffff
>;
};
+ mmc0_pins: pinmux_mmc_pins {
+ pinctrl-single,bits = <
+ /* MMCSD0_DAT[3] MMCSD0_DAT[2]
+ * MMCSD0_DAT[1] MMCSD0_DAT[0]
+ * MMCSD0_CMD MMCSD0_CLK
+ */
+ 0x28 0x00222222 0x00ffffff
+ >;
+ };
};
serial0: serial at 1c42000 {
compatible = "ns16550a";
@@ -115,6 +124,12 @@
reg = <0x21000 0x1000>;
status = "disabled";
};
+ mmc0: mmc at 1c40000 {
+ compatible = "ti,davinci-mmc-da830";
+ reg = <0x40000 0x1000>;
+ interrupts = <16>;
+ status = "disabled";
+ };
spi1: spi at 1f0e000 {
#address-cells = <1>;
#size-cells = <0>;
--
1.7.4.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 4/4] ARM: davinci: da850: override mmc DT node device name
2013-03-12 14:13 [PATCH v5 0/4] Add DT support for davinci_mmc driver Manjunathappa, Prakash
` (2 preceding siblings ...)
2013-03-12 14:13 ` [PATCH v5 3/4] ARM: davinci: da850: add mmc DT entries Manjunathappa, Prakash
@ 2013-03-12 14:13 ` Manjunathappa, Prakash
2013-03-14 11:55 ` [PATCH v5 0/4] Add DT support for davinci_mmc driver Sekhar Nori
4 siblings, 0 replies; 9+ messages in thread
From: Manjunathappa, Prakash @ 2013-03-12 14:13 UTC (permalink / raw)
To: linux-arm-kernel
Populate OF_DEV_AUXDATA with desired device name expected by
davinci_mmc driver. Without this clk_get of davinci_mmc DT driver
fails.
Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
Cc: linux-mmc at vger.kernel.org
Cc: linux-arm-kernel at lists.infradead.org
Cc: linux-kernel at vger.kernel.org
Cc: davinci-linux-open-source at linux.davincidsp.com
Cc: devicetree-discuss at lists.ozlabs.org
Cc: cjb at laptop.org
Cc: Sekhar Nori <nsekhar@ti.com>
---
arch/arm/mach-davinci/da8xx-dt.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-davinci/da8xx-dt.c b/arch/arm/mach-davinci/da8xx-dt.c
index e049f07..516ec7d 100644
--- a/arch/arm/mach-davinci/da8xx-dt.c
+++ b/arch/arm/mach-davinci/da8xx-dt.c
@@ -41,6 +41,8 @@ struct of_dev_auxdata da850_auxdata_lookup[] __initdata = {
OF_DEV_AUXDATA("ti,davinci-i2c", 0x01c22000, "i2c_davinci.1", NULL),
OF_DEV_AUXDATA("ti,davinci-wdt", 0x01c21000, "watchdog", NULL),
OF_DEV_AUXDATA("ti,da830-spi", 0x01f0e000, "spi_davinci.1", NULL),
+ OF_DEV_AUXDATA("ti,davinci-mmc-da830", 0x01c40000,
+ "davinci-mmc-da830.0", NULL),
{}
};
--
1.7.4.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 1/4] ARM: davinci: mmc: derive version information from device name
2013-03-12 14:13 ` [PATCH v5 1/4] ARM: davinci: mmc: derive version information from device name Manjunathappa, Prakash
@ 2013-03-14 11:08 ` Sekhar Nori
2013-03-14 13:51 ` Manjunathappa, Prakash
0 siblings, 1 reply; 9+ messages in thread
From: Sekhar Nori @ 2013-03-14 11:08 UTC (permalink / raw)
To: linux-arm-kernel
Prakash,
The series looks good to me. I tested it again on DA850 EVM (with and
without DT).
On 3/12/2013 7:43 PM, Manjunathappa, Prakash wrote:
> Remove specifying mmc controller IP version information via platform
> data, instead specify device name so that driver derives it from
> platform_device_id table. Also change the clock node name to match
> the changed dev_id.
> Tested on da850-evm to make sure driver loads without clk_get failures.
>
> Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
> Reviewed-by: Sekhar Nori <nsekhar@ti.com>
> ---
> diff --git a/drivers/mmc/host/davinci_mmc.c b/drivers/mmc/host/davinci_mmc.c
> index 27123f8..50e9782 100644
> --- a/drivers/mmc/host/davinci_mmc.c
> +++ b/drivers/mmc/host/davinci_mmc.c
> @@ -1157,6 +1157,18 @@ static void __init init_mmcsd_host(struct mmc_davinci_host *host)
> mmc_davinci_reset_ctrl(host, 0);
> }
>
> +static struct platform_device_id davinci_mmc_devtype[] = {
> + {
> + .name = "davinci-mmc-dm355",
> + .driver_data = MMC_CTLR_VERSION_1,
> + }, {
> + .name = "davinci-mmc-da830",
> + .driver_data = MMC_CTLR_VERSION_2,
> + },
> + {},
> +};
> +MODULE_DEVICE_TABLE(platform, davinci_mmc_devtype);
I should have mentioned this previously, but your choice of name here is
too long. You can simply use dm355-mmc (rather dm6441-mmc?) and
da830-mmc instead like you did for SPI. This would have saved some long
lines. Sorry about not asking for this earlier. I know it would have
saved you a bunch of effort.
Thanks,
Sekhar
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v5 0/4] Add DT support for davinci_mmc driver
2013-03-12 14:13 [PATCH v5 0/4] Add DT support for davinci_mmc driver Manjunathappa, Prakash
` (3 preceding siblings ...)
2013-03-12 14:13 ` [PATCH v5 4/4] ARM: davinci: da850: override mmc DT node device name Manjunathappa, Prakash
@ 2013-03-14 11:55 ` Sekhar Nori
2013-03-14 13:52 ` Manjunathappa, Prakash
4 siblings, 1 reply; 9+ messages in thread
From: Sekhar Nori @ 2013-03-14 11:55 UTC (permalink / raw)
To: linux-arm-kernel
On 3/12/2013 7:43 PM, Manjunathappa, Prakash wrote:
> Patch set adds DT support for davinci_mmc driver and is
> verified on da850-evm without card_detect/write_protect and
> EDMA support. Also takecare to derive controller IP version from
> platform_device_id table, remove version specification in pdata.
>
> Applies on top of below patch under community review:
> "Enable SPI flash support on da850-evm DT kernel"
> http://www.spinics.net/lists/arm-kernel/msg229328.html
>
> Depends on patch waiting for acceptance:
> Patch "mmc: davinci: allow driver to work without DMA resource"
> http://www.mail-archive.com/linux-mmc at vger.kernel.org/msg18771.html
Since this patch did not get picked for v3.9, it may be worthwhile
rebasing it and adding to this series.
Thanks,
Sekhar
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v5 1/4] ARM: davinci: mmc: derive version information from device name
2013-03-14 11:08 ` Sekhar Nori
@ 2013-03-14 13:51 ` Manjunathappa, Prakash
0 siblings, 0 replies; 9+ messages in thread
From: Manjunathappa, Prakash @ 2013-03-14 13:51 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Mar 14, 2013 at 16:38:09, Nori, Sekhar wrote:
> Prakash,
>
> The series looks good to me. I tested it again on DA850 EVM (with and
> without DT).
>
> On 3/12/2013 7:43 PM, Manjunathappa, Prakash wrote:
> > Remove specifying mmc controller IP version information via platform
> > data, instead specify device name so that driver derives it from
> > platform_device_id table. Also change the clock node name to match
> > the changed dev_id.
> > Tested on da850-evm to make sure driver loads without clk_get failures.
> >
> > Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
> > Reviewed-by: Sekhar Nori <nsekhar@ti.com>
> > ---
>
> > diff --git a/drivers/mmc/host/davinci_mmc.c b/drivers/mmc/host/davinci_mmc.c
> > index 27123f8..50e9782 100644
> > --- a/drivers/mmc/host/davinci_mmc.c
> > +++ b/drivers/mmc/host/davinci_mmc.c
> > @@ -1157,6 +1157,18 @@ static void __init init_mmcsd_host(struct mmc_davinci_host *host)
> > mmc_davinci_reset_ctrl(host, 0);
> > }
> >
> > +static struct platform_device_id davinci_mmc_devtype[] = {
> > + {
> > + .name = "davinci-mmc-dm355",
> > + .driver_data = MMC_CTLR_VERSION_1,
> > + }, {
> > + .name = "davinci-mmc-da830",
> > + .driver_data = MMC_CTLR_VERSION_2,
> > + },
> > + {},
> > +};
> > +MODULE_DEVICE_TABLE(platform, davinci_mmc_devtype);
>
> I should have mentioned this previously, but your choice of name here is
> too long. You can simply use dm355-mmc (rather dm6441-mmc?) and
> da830-mmc instead like you did for SPI. This would have saved some long
> lines. Sorry about not asking for this earlier. I know it would have
> saved you a bunch of effort.
>
No problem, will change the name.
Thanks,
Prakash
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v5 0/4] Add DT support for davinci_mmc driver
2013-03-14 11:55 ` [PATCH v5 0/4] Add DT support for davinci_mmc driver Sekhar Nori
@ 2013-03-14 13:52 ` Manjunathappa, Prakash
0 siblings, 0 replies; 9+ messages in thread
From: Manjunathappa, Prakash @ 2013-03-14 13:52 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Mar 14, 2013 at 17:25:13, Nori, Sekhar wrote:
> On 3/12/2013 7:43 PM, Manjunathappa, Prakash wrote:
> > Patch set adds DT support for davinci_mmc driver and is
> > verified on da850-evm without card_detect/write_protect and
> > EDMA support. Also takecare to derive controller IP version from
> > platform_device_id table, remove version specification in pdata.
> >
> > Applies on top of below patch under community review:
> > "Enable SPI flash support on da850-evm DT kernel"
> > http://www.spinics.net/lists/arm-kernel/msg229328.html
> >
> > Depends on patch waiting for acceptance:
> > Patch "mmc: davinci: allow driver to work without DMA resource"
> > http://www.mail-archive.com/linux-mmc at vger.kernel.org/msg18771.html
>
> Since this patch did not get picked for v3.9, it may be worthwhile
> rebasing it and adding to this series.
>
Will do that.
Thanks,
Prakash
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2013-03-14 13:52 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-12 14:13 [PATCH v5 0/4] Add DT support for davinci_mmc driver Manjunathappa, Prakash
2013-03-12 14:13 ` [PATCH v5 1/4] ARM: davinci: mmc: derive version information from device name Manjunathappa, Prakash
2013-03-14 11:08 ` Sekhar Nori
2013-03-14 13:51 ` Manjunathappa, Prakash
2013-03-12 14:13 ` [PATCH v5 2/4] mmc: davinci_mmc: add DT support Manjunathappa, Prakash
2013-03-12 14:13 ` [PATCH v5 3/4] ARM: davinci: da850: add mmc DT entries Manjunathappa, Prakash
2013-03-12 14:13 ` [PATCH v5 4/4] ARM: davinci: da850: override mmc DT node device name Manjunathappa, Prakash
2013-03-14 11:55 ` [PATCH v5 0/4] Add DT support for davinci_mmc driver Sekhar Nori
2013-03-14 13:52 ` Manjunathappa, Prakash
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).