mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
v3.10 DT updates for DaVinci
This set of patches adds support for PWMs and SPI controller present on DA850 and for SPI flash present on DA850 EVM. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iQIcBAABAgAGBQJRbtMZAAoJEGFBu2jqvgRNiGwP+gPdSZc7aroAiV7C9wNg0cJ7 D2Z4O0ZnsjeBgGlPYEVWLeqYIuTR1fa2Z1R8MMsb2GbQiSAZOd3Eg8Crto+SlFN4 T71rbomaNnt96nXupmX5+6+aE1moA8QoneySAxMgWBiROt8ZPVrlKnlzVmJQnwiY r5INF76TOLCTtDZLPkyVWuMuLAt5hHnI6ihSdfmfK4DUavpwo7FynYVGl2bMGZOw i3gpICOoODbypLYraIDZg4o0vdVzlvjm03rvoplWRO84Aa10pINAhZ76fnQqDFPm USfqHDXXmF4mwYFzKSlnY159Dha74LGRJcb7+PLmpKZtvFbTwJ92GyZLZq5YpSjD bfPZ4hhJZqzG2PCaLwUvuD7352nuT5+05P+yGDHxeTxStqPGZcxxrPoQKISh82Mz gCB+B6hYsxFhaJ0A0lmCmpxmOnytiJVuHAtgAbPWOhDjqwRC1g4xnNyoZDoIquOe 8KKTqKojtG7O4st8UuE4+SB0OyJYk2nDhpsDXyY5F5z71eVOGYp4cj9avOhN+9zO 0DuQkeX1BhUfspSU5sZqMABLvpVvtwckMnDy95bEvBBxUyx/tunigX3Eg5nhGu/j K894RtsziYKXcq50RlAp+RvpBoizrm4E3iBfxk3PlO74nbFp4AMgUcrHAz90QUGE Q4/hKwIc+wbTPSRzQs3V =KZ+c -----END PGP SIGNATURE----- Merge tag 'davinci-for-v3.10/dt-2-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/nsekhar/linux-davinci into next/dt2 From Sekhar Nori: v3.10 DT updates for DaVinci This set of patches adds support for PWMs and SPI controller present on DA850 and for SPI flash present on DA850 EVM. * tag 'davinci-for-v3.10/dt-2-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/nsekhar/linux-davinci: ARM: davinci: da850-evm: add SPI flash support ARM: davinci: da850: override SPI DT node device name ARM: davinci: da850: add SPI1 DT node spi/davinci: add DT binding documentation spi/davinci: no wildcards in DT compatible property ARM: davinci: da850: add EHRPWM & ECAP DT node ARM: davinci: da850: override mmc DT node device name ARM: davinci: da850: add mmc DT entries mmc: davinci_mmc: add DT support ARM: davinci: da850: add tps6507x regulator DT data ARM: regulator: add tps6507x device tree data ARM: davinci: remove test for undefined Kconfig macro ARM: davinci: mmc: derive version information from device name ARM: davinci: da850: add ECAP & EHRPWM clock nodes ARM: davinci: clk framework support for enable/disable functionality Signed-off-by: Olof Johansson <[email protected]>
This commit is contained in:
commit
c8bf98a28f
30 changed files with 523 additions and 44 deletions
|
|
@ -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>
|
||||
|
||||
|
|
@ -522,14 +524,16 @@ static int __init davinci_acquire_dma_channels(struct mmc_davinci_host *host)
|
|||
dma_cap_set(DMA_SLAVE, mask);
|
||||
|
||||
host->dma_tx =
|
||||
dma_request_channel(mask, edma_filter_fn, &host->txdma);
|
||||
dma_request_slave_channel_compat(mask, edma_filter_fn,
|
||||
&host->txdma, mmc_dev(host->mmc), "tx");
|
||||
if (!host->dma_tx) {
|
||||
dev_err(mmc_dev(host->mmc), "Can't get dma_tx channel\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
host->dma_rx =
|
||||
dma_request_channel(mask, edma_filter_fn, &host->rxdma);
|
||||
dma_request_slave_channel_compat(mask, edma_filter_fn,
|
||||
&host->rxdma, mmc_dev(host->mmc), "rx");
|
||||
if (!host->dma_rx) {
|
||||
dev_err(mmc_dev(host->mmc), "Can't get dma_rx channel\n");
|
||||
r = -ENODEV;
|
||||
|
|
@ -1157,16 +1161,86 @@ 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 = "dm6441-mmc",
|
||||
.driver_data = MMC_CTLR_VERSION_1,
|
||||
}, {
|
||||
.name = "da830-mmc",
|
||||
.driver_data = MMC_CTLR_VERSION_2,
|
||||
},
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(platform, davinci_mmc_devtype);
|
||||
|
||||
static const struct of_device_id davinci_mmc_dt_ids[] = {
|
||||
{
|
||||
.compatible = "ti,dm6441-mmc",
|
||||
.data = &davinci_mmc_devtype[MMC_CTLR_VERSION_1],
|
||||
},
|
||||
{
|
||||
.compatible = "ti,da830-mmc",
|
||||
.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 = pdev->dev.platform_data;
|
||||
struct davinci_mmc_config *pdata = NULL;
|
||||
struct mmc_davinci_host *host = NULL;
|
||||
struct mmc_host *mmc = NULL;
|
||||
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 */
|
||||
pdata = mmc_parse_pdata(pdev);
|
||||
if (pdata == NULL) {
|
||||
dev_err(&pdev->dev, "Couldn't get platform data\n");
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
ret = -ENODEV;
|
||||
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
|
|
@ -1237,7 +1311,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;
|
||||
|
|
@ -1406,8 +1482,10 @@ 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,
|
||||
};
|
||||
|
||||
static int __init davinci_mmcsd_init(void)
|
||||
|
|
|
|||
Loading…
Reference in a new issue