diff options
author | Ian Molton <ian@mnementh.co.uk> | 2010-01-06 07:51:48 -0500 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2010-01-18 06:30:27 -0500 |
commit | 64e8867ba8098b69889c1af94997a5ba2348fb26 (patch) | |
tree | 3391806575ec3435a26043a22ba45c9d76f0b791 /drivers/mfd/tc6393xb.c | |
parent | 6f2af72a2451b7491fba820b1d1b0b91c6a84027 (diff) |
mfd: tmio_mmc hardware abstraction for CNF area
This patch abstracts out the CNF area code from tmio_mmc which
is not present in all hardware that can use this driver. This
is required so that we can support non-toshiba based hardware.
ASIC3 support by Philipp Zabel
Signed-off-by: Ian Molton <ian@mnementh.co.uk>
Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/mfd/tc6393xb.c')
-rw-r--r-- | drivers/mfd/tc6393xb.c | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/drivers/mfd/tc6393xb.c b/drivers/mfd/tc6393xb.c index 1429a7341a9a..4bc5a08a2b09 100644 --- a/drivers/mfd/tc6393xb.c +++ b/drivers/mfd/tc6393xb.c | |||
@@ -136,10 +136,6 @@ static int tc6393xb_nand_enable(struct platform_device *nand) | |||
136 | return 0; | 136 | return 0; |
137 | } | 137 | } |
138 | 138 | ||
139 | static struct tmio_mmc_data tc6393xb_mmc_data = { | ||
140 | .hclk = 24000000, | ||
141 | }; | ||
142 | |||
143 | static struct resource __devinitdata tc6393xb_nand_resources[] = { | 139 | static struct resource __devinitdata tc6393xb_nand_resources[] = { |
144 | { | 140 | { |
145 | .start = 0x1000, | 141 | .start = 0x1000, |
@@ -165,11 +161,6 @@ static struct resource __devinitdata tc6393xb_mmc_resources[] = { | |||
165 | .flags = IORESOURCE_MEM, | 161 | .flags = IORESOURCE_MEM, |
166 | }, | 162 | }, |
167 | { | 163 | { |
168 | .start = 0x200, | ||
169 | .end = 0x2ff, | ||
170 | .flags = IORESOURCE_MEM, | ||
171 | }, | ||
172 | { | ||
173 | .start = IRQ_TC6393_MMC, | 164 | .start = IRQ_TC6393_MMC, |
174 | .end = IRQ_TC6393_MMC, | 165 | .end = IRQ_TC6393_MMC, |
175 | .flags = IORESOURCE_IRQ, | 166 | .flags = IORESOURCE_IRQ, |
@@ -346,6 +337,50 @@ int tc6393xb_lcd_mode(struct platform_device *fb, | |||
346 | } | 337 | } |
347 | EXPORT_SYMBOL(tc6393xb_lcd_mode); | 338 | EXPORT_SYMBOL(tc6393xb_lcd_mode); |
348 | 339 | ||
340 | static int tc6393xb_mmc_enable(struct platform_device *mmc) | ||
341 | { | ||
342 | struct platform_device *dev = to_platform_device(mmc->dev.parent); | ||
343 | struct tc6393xb *tc6393xb = platform_get_drvdata(dev); | ||
344 | |||
345 | tmio_core_mmc_enable(tc6393xb->scr + 0x200, 0, | ||
346 | tc6393xb_mmc_resources[0].start & 0xfffe); | ||
347 | |||
348 | return 0; | ||
349 | } | ||
350 | |||
351 | static int tc6393xb_mmc_resume(struct platform_device *mmc) | ||
352 | { | ||
353 | struct platform_device *dev = to_platform_device(mmc->dev.parent); | ||
354 | struct tc6393xb *tc6393xb = platform_get_drvdata(dev); | ||
355 | |||
356 | tmio_core_mmc_resume(tc6393xb->scr + 0x200, 0, | ||
357 | tc6393xb_mmc_resources[0].start & 0xfffe); | ||
358 | |||
359 | return 0; | ||
360 | } | ||
361 | |||
362 | static void tc6393xb_mmc_pwr(struct platform_device *mmc, int state) | ||
363 | { | ||
364 | struct platform_device *dev = to_platform_device(mmc->dev.parent); | ||
365 | struct tc6393xb *tc6393xb = platform_get_drvdata(dev); | ||
366 | |||
367 | tmio_core_mmc_pwr(tc6393xb->scr + 0x200, 0, state); | ||
368 | } | ||
369 | |||
370 | static void tc6393xb_mmc_clk_div(struct platform_device *mmc, int state) | ||
371 | { | ||
372 | struct platform_device *dev = to_platform_device(mmc->dev.parent); | ||
373 | struct tc6393xb *tc6393xb = platform_get_drvdata(dev); | ||
374 | |||
375 | tmio_core_mmc_clk_div(tc6393xb->scr + 0x200, 0, state); | ||
376 | } | ||
377 | |||
378 | static struct tmio_mmc_data tc6393xb_mmc_data = { | ||
379 | .hclk = 24000000, | ||
380 | .set_pwr = tc6393xb_mmc_pwr, | ||
381 | .set_clk_div = tc6393xb_mmc_clk_div, | ||
382 | }; | ||
383 | |||
349 | static struct mfd_cell __devinitdata tc6393xb_cells[] = { | 384 | static struct mfd_cell __devinitdata tc6393xb_cells[] = { |
350 | [TC6393XB_CELL_NAND] = { | 385 | [TC6393XB_CELL_NAND] = { |
351 | .name = "tmio-nand", | 386 | .name = "tmio-nand", |
@@ -355,6 +390,8 @@ static struct mfd_cell __devinitdata tc6393xb_cells[] = { | |||
355 | }, | 390 | }, |
356 | [TC6393XB_CELL_MMC] = { | 391 | [TC6393XB_CELL_MMC] = { |
357 | .name = "tmio-mmc", | 392 | .name = "tmio-mmc", |
393 | .enable = tc6393xb_mmc_enable, | ||
394 | .resume = tc6393xb_mmc_resume, | ||
358 | .driver_data = &tc6393xb_mmc_data, | 395 | .driver_data = &tc6393xb_mmc_data, |
359 | .num_resources = ARRAY_SIZE(tc6393xb_mmc_resources), | 396 | .num_resources = ARRAY_SIZE(tc6393xb_mmc_resources), |
360 | .resources = tc6393xb_mmc_resources, | 397 | .resources = tc6393xb_mmc_resources, |
@@ -836,3 +873,4 @@ MODULE_LICENSE("GPL v2"); | |||
836 | MODULE_AUTHOR("Ian Molton, Dmitry Baryshkov and Dirk Opfer"); | 873 | MODULE_AUTHOR("Ian Molton, Dmitry Baryshkov and Dirk Opfer"); |
837 | MODULE_DESCRIPTION("tc6393xb Toshiba Mobile IO Controller"); | 874 | MODULE_DESCRIPTION("tc6393xb Toshiba Mobile IO Controller"); |
838 | MODULE_ALIAS("platform:tc6393xb"); | 875 | MODULE_ALIAS("platform:tc6393xb"); |
876 | |||