ARM: at91: atmel-ssc: add platform device id table
Add platform device id to check whether the SSC controller support pdc or dam for data transfer If match "at91rm9200_ssc", which support pdc for data transfer If match "at91sam9g45_ssc", which support dma for data transfer Signed-off-by: Bo Shen <voice.shen@atmel.com> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
Родитель
90b4d60c61
Коммит
636036d29a
|
@ -184,9 +184,9 @@ static struct clk_lookup periph_clocks_lookups[] = {
|
|||
CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.1", &tc3_clk),
|
||||
CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.1", &tc4_clk),
|
||||
CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.1", &tc5_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "at91rm9200_ssc.0", &ssc0_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "at91rm9200_ssc.1", &ssc1_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "at91rm9200_ssc.2", &ssc2_clk),
|
||||
CLKDEV_CON_DEV_ID(NULL, "i2c-at91rm9200.0", &twi_clk),
|
||||
/* fake hclk clock */
|
||||
CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
|
||||
|
|
|
@ -752,7 +752,7 @@ static struct resource ssc0_resources[] = {
|
|||
};
|
||||
|
||||
static struct platform_device at91rm9200_ssc0_device = {
|
||||
.name = "ssc",
|
||||
.name = "at91rm9200_ssc",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.dma_mask = &ssc0_dmamask,
|
||||
|
@ -794,7 +794,7 @@ static struct resource ssc1_resources[] = {
|
|||
};
|
||||
|
||||
static struct platform_device at91rm9200_ssc1_device = {
|
||||
.name = "ssc",
|
||||
.name = "at91rm9200_ssc",
|
||||
.id = 1,
|
||||
.dev = {
|
||||
.dma_mask = &ssc1_dmamask,
|
||||
|
@ -836,7 +836,7 @@ static struct resource ssc2_resources[] = {
|
|||
};
|
||||
|
||||
static struct platform_device at91rm9200_ssc2_device = {
|
||||
.name = "ssc",
|
||||
.name = "at91rm9200_ssc",
|
||||
.id = 2,
|
||||
.dev = {
|
||||
.dma_mask = &ssc2_dmamask,
|
||||
|
|
|
@ -210,7 +210,7 @@ static struct clk_lookup periph_clocks_lookups[] = {
|
|||
CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.1", &tc3_clk),
|
||||
CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.1", &tc4_clk),
|
||||
CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.1", &tc5_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "at91rm9200_ssc.0", &ssc_clk),
|
||||
CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9260.0", &twi_clk),
|
||||
CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g20.0", &twi_clk),
|
||||
/* more usart lookup table for DT entries */
|
||||
|
|
|
@ -742,7 +742,7 @@ static struct resource ssc_resources[] = {
|
|||
};
|
||||
|
||||
static struct platform_device at91sam9260_ssc_device = {
|
||||
.name = "ssc",
|
||||
.name = "at91rm9200_ssc",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.dma_mask = &ssc_dmamask,
|
||||
|
|
|
@ -174,9 +174,9 @@ static struct clk_lookup periph_clocks_lookups[] = {
|
|||
CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tc0_clk),
|
||||
CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.0", &tc1_clk),
|
||||
CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.0", &tc2_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "at91rm9200_ssc.0", &ssc0_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "at91rm9200_ssc.1", &ssc1_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "at91rm9200_ssc.2", &ssc2_clk),
|
||||
CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &hck0),
|
||||
CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9261.0", &twi_clk),
|
||||
CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g10.0", &twi_clk),
|
||||
|
|
|
@ -706,7 +706,7 @@ static struct resource ssc0_resources[] = {
|
|||
};
|
||||
|
||||
static struct platform_device at91sam9261_ssc0_device = {
|
||||
.name = "ssc",
|
||||
.name = "at91rm9200_ssc",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.dma_mask = &ssc0_dmamask,
|
||||
|
@ -748,7 +748,7 @@ static struct resource ssc1_resources[] = {
|
|||
};
|
||||
|
||||
static struct platform_device at91sam9261_ssc1_device = {
|
||||
.name = "ssc",
|
||||
.name = "at91rm9200_ssc",
|
||||
.id = 1,
|
||||
.dev = {
|
||||
.dma_mask = &ssc1_dmamask,
|
||||
|
@ -790,7 +790,7 @@ static struct resource ssc2_resources[] = {
|
|||
};
|
||||
|
||||
static struct platform_device at91sam9261_ssc2_device = {
|
||||
.name = "ssc",
|
||||
.name = "at91rm9200_ssc",
|
||||
.id = 2,
|
||||
.dev = {
|
||||
.dma_mask = &ssc2_dmamask,
|
||||
|
|
|
@ -186,8 +186,8 @@ static struct clk *periph_clocks[] __initdata = {
|
|||
static struct clk_lookup periph_clocks_lookups[] = {
|
||||
/* One additional fake clock for macb_hclk */
|
||||
CLKDEV_CON_ID("hclk", &macb_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "at91rm9200_ssc.0", &ssc0_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "at91rm9200_ssc.1", &ssc1_clk),
|
||||
CLKDEV_CON_DEV_ID("mci_clk", "atmel_mci.0", &mmc0_clk),
|
||||
CLKDEV_CON_DEV_ID("mci_clk", "atmel_mci.1", &mmc1_clk),
|
||||
CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk),
|
||||
|
|
|
@ -1199,7 +1199,7 @@ static struct resource ssc0_resources[] = {
|
|||
};
|
||||
|
||||
static struct platform_device at91sam9263_ssc0_device = {
|
||||
.name = "ssc",
|
||||
.name = "at91rm9200_ssc",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.dma_mask = &ssc0_dmamask,
|
||||
|
@ -1241,7 +1241,7 @@ static struct resource ssc1_resources[] = {
|
|||
};
|
||||
|
||||
static struct platform_device at91sam9263_ssc1_device = {
|
||||
.name = "ssc",
|
||||
.name = "at91rm9200_ssc",
|
||||
.id = 1,
|
||||
.dev = {
|
||||
.dma_mask = &ssc1_dmamask,
|
||||
|
|
|
@ -239,8 +239,8 @@ static struct clk_lookup periph_clocks_lookups[] = {
|
|||
CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.1", &tcb0_clk),
|
||||
CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g10.0", &twi0_clk),
|
||||
CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g10.1", &twi1_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "at91sam9g45_ssc.0", &ssc0_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "at91sam9g45_ssc.1", &ssc1_clk),
|
||||
CLKDEV_CON_DEV_ID(NULL, "atmel-trng", &trng_clk),
|
||||
CLKDEV_CON_DEV_ID(NULL, "atmel_sha", &aestdessha_clk),
|
||||
CLKDEV_CON_DEV_ID(NULL, "atmel_tdes", &aestdessha_clk),
|
||||
|
|
|
@ -1459,7 +1459,7 @@ static struct resource ssc0_resources[] = {
|
|||
};
|
||||
|
||||
static struct platform_device at91sam9g45_ssc0_device = {
|
||||
.name = "ssc",
|
||||
.name = "at91sam9g45_ssc",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.dma_mask = &ssc0_dmamask,
|
||||
|
@ -1501,7 +1501,7 @@ static struct resource ssc1_resources[] = {
|
|||
};
|
||||
|
||||
static struct platform_device at91sam9g45_ssc1_device = {
|
||||
.name = "ssc",
|
||||
.name = "at91sam9g45_ssc",
|
||||
.id = 1,
|
||||
.dev = {
|
||||
.dma_mask = &ssc1_dmamask,
|
||||
|
|
|
@ -184,8 +184,8 @@ static struct clk_lookup periph_clocks_lookups[] = {
|
|||
CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tc0_clk),
|
||||
CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.0", &tc1_clk),
|
||||
CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.0", &tc2_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "at91rm9200_ssc.0", &ssc0_clk),
|
||||
CLKDEV_CON_DEV_ID("pclk", "at91rm9200_ssc.1", &ssc1_clk),
|
||||
CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g20.0", &twi0_clk),
|
||||
CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g20.1", &twi1_clk),
|
||||
CLKDEV_CON_ID("pioA", &pioA_clk),
|
||||
|
|
|
@ -832,7 +832,7 @@ static struct resource ssc0_resources[] = {
|
|||
};
|
||||
|
||||
static struct platform_device at91sam9rl_ssc0_device = {
|
||||
.name = "ssc",
|
||||
.name = "at91rm9200_ssc",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.dma_mask = &ssc0_dmamask,
|
||||
|
@ -874,7 +874,7 @@ static struct resource ssc1_resources[] = {
|
|||
};
|
||||
|
||||
static struct platform_device at91sam9rl_ssc1_device = {
|
||||
.name = "ssc",
|
||||
.name = "at91rm9200_ssc",
|
||||
.id = 1,
|
||||
.dev = {
|
||||
.dma_mask = &ssc1_dmamask,
|
||||
|
|
|
@ -68,6 +68,26 @@ void ssc_free(struct ssc_device *ssc)
|
|||
}
|
||||
EXPORT_SYMBOL(ssc_free);
|
||||
|
||||
static struct atmel_ssc_platform_data at91rm9200_config = {
|
||||
.use_dma = 0,
|
||||
};
|
||||
|
||||
static struct atmel_ssc_platform_data at91sam9g45_config = {
|
||||
.use_dma = 1,
|
||||
};
|
||||
|
||||
static const struct platform_device_id atmel_ssc_devtypes[] = {
|
||||
{
|
||||
.name = "at91rm9200_ssc",
|
||||
.driver_data = (unsigned long) &at91rm9200_config,
|
||||
}, {
|
||||
.name = "at91sam9g45_ssc",
|
||||
.driver_data = (unsigned long) &at91sam9g45_config,
|
||||
}, {
|
||||
/* sentinel */
|
||||
}
|
||||
};
|
||||
|
||||
static int ssc_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct resource *regs;
|
||||
|
@ -80,6 +100,8 @@ static int ssc_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
ssc->pdev = pdev;
|
||||
ssc->pdata = (struct atmel_ssc_platform_data *)
|
||||
platform_get_device_id(pdev)->driver_data;
|
||||
|
||||
regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!regs) {
|
||||
|
@ -139,6 +161,7 @@ static struct platform_driver ssc_driver = {
|
|||
.name = "ssc",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.id_table = atmel_ssc_devtypes,
|
||||
.probe = ssc_probe,
|
||||
.remove = __devexit_p(ssc_remove),
|
||||
};
|
||||
|
|
|
@ -5,10 +5,15 @@
|
|||
#include <linux/list.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
struct atmel_ssc_platform_data {
|
||||
int use_dma;
|
||||
};
|
||||
|
||||
struct ssc_device {
|
||||
struct list_head list;
|
||||
void __iomem *regs;
|
||||
struct platform_device *pdev;
|
||||
struct atmel_ssc_platform_data *pdata;
|
||||
struct clk *clk;
|
||||
int user;
|
||||
int irq;
|
||||
|
|
Загрузка…
Ссылка в новой задаче