Merge tag 'ep93xx-devel-for-3.6' of git://github.com/RyanMallon/linux-ep93xx into next/soc
From Ryan Mallon <rmallon@gmail.com>: * tag 'ep93xx-devel-for-3.6' of git://github.com/RyanMallon/linux-ep93xx: ep93xx: Add IDE support to edb93xx boards ep93xx: IDE driver platform support code Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
Коммит
5e7c2c2f97
|
@ -797,6 +797,102 @@ static struct platform_device ep93xx_wdt_device = {
|
|||
.resource = ep93xx_wdt_resources,
|
||||
};
|
||||
|
||||
/*************************************************************************
|
||||
* EP93xx IDE
|
||||
*************************************************************************/
|
||||
static struct resource ep93xx_ide_resources[] = {
|
||||
DEFINE_RES_MEM(EP93XX_IDE_PHYS_BASE, 0x38),
|
||||
DEFINE_RES_IRQ(IRQ_EP93XX_EXT3),
|
||||
};
|
||||
|
||||
static struct platform_device ep93xx_ide_device = {
|
||||
.name = "ep93xx-ide",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.dma_mask = &ep93xx_ide_device.dev.coherent_dma_mask,
|
||||
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(ep93xx_ide_resources),
|
||||
.resource = ep93xx_ide_resources,
|
||||
};
|
||||
|
||||
void __init ep93xx_register_ide(void)
|
||||
{
|
||||
platform_device_register(&ep93xx_ide_device);
|
||||
}
|
||||
|
||||
int ep93xx_ide_acquire_gpio(struct platform_device *pdev)
|
||||
{
|
||||
int err;
|
||||
int i;
|
||||
|
||||
err = gpio_request(EP93XX_GPIO_LINE_EGPIO2, dev_name(&pdev->dev));
|
||||
if (err)
|
||||
return err;
|
||||
err = gpio_request(EP93XX_GPIO_LINE_EGPIO15, dev_name(&pdev->dev));
|
||||
if (err)
|
||||
goto fail_egpio15;
|
||||
for (i = 2; i < 8; i++) {
|
||||
err = gpio_request(EP93XX_GPIO_LINE_E(i), dev_name(&pdev->dev));
|
||||
if (err)
|
||||
goto fail_gpio_e;
|
||||
}
|
||||
for (i = 4; i < 8; i++) {
|
||||
err = gpio_request(EP93XX_GPIO_LINE_G(i), dev_name(&pdev->dev));
|
||||
if (err)
|
||||
goto fail_gpio_g;
|
||||
}
|
||||
for (i = 0; i < 8; i++) {
|
||||
err = gpio_request(EP93XX_GPIO_LINE_H(i), dev_name(&pdev->dev));
|
||||
if (err)
|
||||
goto fail_gpio_h;
|
||||
}
|
||||
|
||||
/* GPIO ports E[7:2], G[7:4] and H used by IDE */
|
||||
ep93xx_devcfg_clear_bits(EP93XX_SYSCON_DEVCFG_EONIDE |
|
||||
EP93XX_SYSCON_DEVCFG_GONIDE |
|
||||
EP93XX_SYSCON_DEVCFG_HONIDE);
|
||||
return 0;
|
||||
|
||||
fail_gpio_h:
|
||||
for (--i; i >= 0; --i)
|
||||
gpio_free(EP93XX_GPIO_LINE_H(i));
|
||||
i = 8;
|
||||
fail_gpio_g:
|
||||
for (--i; i >= 4; --i)
|
||||
gpio_free(EP93XX_GPIO_LINE_G(i));
|
||||
i = 8;
|
||||
fail_gpio_e:
|
||||
for (--i; i >= 2; --i)
|
||||
gpio_free(EP93XX_GPIO_LINE_E(i));
|
||||
gpio_free(EP93XX_GPIO_LINE_EGPIO15);
|
||||
fail_egpio15:
|
||||
gpio_free(EP93XX_GPIO_LINE_EGPIO2);
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(ep93xx_ide_acquire_gpio);
|
||||
|
||||
void ep93xx_ide_release_gpio(struct platform_device *pdev)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 2; i < 8; i++)
|
||||
gpio_free(EP93XX_GPIO_LINE_E(i));
|
||||
for (i = 4; i < 8; i++)
|
||||
gpio_free(EP93XX_GPIO_LINE_G(i));
|
||||
for (i = 0; i < 8; i++)
|
||||
gpio_free(EP93XX_GPIO_LINE_H(i));
|
||||
gpio_free(EP93XX_GPIO_LINE_EGPIO15);
|
||||
gpio_free(EP93XX_GPIO_LINE_EGPIO2);
|
||||
|
||||
|
||||
/* GPIO ports E[7:2], G[7:4] and H used by GPIO */
|
||||
ep93xx_devcfg_set_bits(EP93XX_SYSCON_DEVCFG_EONIDE |
|
||||
EP93XX_SYSCON_DEVCFG_GONIDE |
|
||||
EP93XX_SYSCON_DEVCFG_HONIDE);
|
||||
}
|
||||
EXPORT_SYMBOL(ep93xx_ide_release_gpio);
|
||||
|
||||
void __init ep93xx_init_devices(void)
|
||||
{
|
||||
/* Disallow access to MaverickCrunch initially */
|
||||
|
|
|
@ -233,6 +233,29 @@ static void __init edb93xx_register_fb(void)
|
|||
}
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
* EDB93xx IDE
|
||||
*************************************************************************/
|
||||
static int __init edb93xx_has_ide(void)
|
||||
{
|
||||
/*
|
||||
* Although EDB9312 and EDB9315 do have IDE capability, they have
|
||||
* INTRQ line wired as pull-up, which makes using IDE interface
|
||||
* problematic.
|
||||
*/
|
||||
return machine_is_edb9312() || machine_is_edb9315() ||
|
||||
machine_is_edb9315a();
|
||||
}
|
||||
|
||||
static void __init edb93xx_register_ide(void)
|
||||
{
|
||||
if (!edb93xx_has_ide())
|
||||
return;
|
||||
|
||||
ep93xx_register_ide();
|
||||
}
|
||||
|
||||
|
||||
static void __init edb93xx_init_machine(void)
|
||||
{
|
||||
ep93xx_init_devices();
|
||||
|
@ -243,6 +266,7 @@ static void __init edb93xx_init_machine(void)
|
|||
edb93xx_register_i2s();
|
||||
edb93xx_register_pwm();
|
||||
edb93xx_register_fb();
|
||||
edb93xx_register_ide();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -48,6 +48,9 @@ void ep93xx_register_i2s(void);
|
|||
int ep93xx_i2s_acquire(void);
|
||||
void ep93xx_i2s_release(void);
|
||||
void ep93xx_register_ac97(void);
|
||||
void ep93xx_register_ide(void);
|
||||
int ep93xx_ide_acquire_gpio(struct platform_device *pdev);
|
||||
void ep93xx_ide_release_gpio(struct platform_device *pdev);
|
||||
|
||||
void ep93xx_init_devices(void);
|
||||
extern struct sys_timer ep93xx_timer;
|
||||
|
|
|
@ -69,6 +69,7 @@
|
|||
|
||||
#define EP93XX_BOOT_ROM_BASE EP93XX_AHB_IOMEM(0x00090000)
|
||||
|
||||
#define EP93XX_IDE_PHYS_BASE EP93XX_AHB_PHYS(0x000a0000)
|
||||
#define EP93XX_IDE_BASE EP93XX_AHB_IOMEM(0x000a0000)
|
||||
|
||||
#define EP93XX_VIC1_BASE EP93XX_AHB_IOMEM(0x000b0000)
|
||||
|
|
Загрузка…
Ссылка в новой задаче