Add StrataFlash Vpp GPIO and alternative driver.

Signed-off-by: Petr Cvek <[email protected]>
---
 arch/arm/mach-pxa/magician.c | 76 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 73 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-pxa/magician.c b/arch/arm/mach-pxa/magician.c
index 7519238..7331b34 100644
--- a/arch/arm/mach-pxa/magician.c
+++ b/arch/arm/mach-pxa/magician.c
@@ -845,20 +845,66 @@ static struct pxaohci_platform_data magician_ohci_info = {
  * StrataFlash
  */
 
+static int magician_flash_init(struct platform_device *pdev)
+{
+       int ret = gpio_request(EGPIO_MAGICIAN_FLASH_VPP, "flash Vpp enable");
+
+       if (ret) {
+               pr_err("Cannot request flash enable GPIO (%i)\n", ret);
+               return ret;
+       }
+
+       ret = gpio_direction_output(EGPIO_MAGICIAN_FLASH_VPP, 1);
+       if (ret) {
+               pr_err("Cannot set direction for flash enable (%i)\n", ret);
+               gpio_free(EGPIO_MAGICIAN_FLASH_VPP);
+       }
+
+       return ret;
+}
+
 static void magician_set_vpp(struct platform_device *pdev, int vpp)
 {
        gpio_set_value(EGPIO_MAGICIAN_FLASH_VPP, vpp);
 }
 
+static void magician_flash_exit(struct platform_device *pdev)
+{
+       gpio_free(EGPIO_MAGICIAN_FLASH_VPP);
+}
+
 static struct resource strataflash_resource = {
        .start  = PXA_CS0_PHYS,
        .end    = PXA_CS0_PHYS + SZ_64M - 1,
        .flags  = IORESOURCE_MEM,
 };
 
+static struct mtd_partition magician_flash_parts[] = {
+       {
+               .name           = "Bootloader",
+               .offset         = 0x0,
+               .size           = 0x40000,
+               .mask_flags     = MTD_WRITEABLE,        /* EXPERIMENTAL */
+       },
+       {
+               .name   = "Linux Kernel",
+               .offset = 0x40000,
+               .size   = MTDPART_SIZ_FULL,
+       },
+};
+
+#if 1  /* Choose which one fits you better */
+/*
+ * physmap-flash driver
+ */
+
 static struct physmap_flash_data strataflash_data = {
-       .width = 4,
-       .set_vpp = magician_set_vpp,
+       .width          = 4,
+       .init           = magician_flash_init,
+       .set_vpp        = magician_set_vpp,
+       .exit           = magician_flash_exit,
+       .parts          = magician_flash_parts,
+       .nr_parts       = ARRAY_SIZE(magician_flash_parts),
 };
 
 static struct platform_device strataflash = {
@@ -871,6 +917,30 @@ static struct platform_device strataflash = {
        },
 };
 
+#else
+
+/*
+ * pxa2xx-flash driver
+ */
+
+static struct flash_platform_data magician_flash_data = {
+       .map_name       = "cfi_probe",
+       .parts          = magician_flash_parts,
+       .nr_parts       = ARRAY_SIZE(magician_flash_parts),
+       .width          = 4,
+};
+
+static struct platform_device strataflash = {
+       .name   = "pxa2xx-flash",
+       .id     = -1,
+       .dev = {
+               .platform_data = &magician_flash_data,
+       },
+       .resource = &strataflash_resource,
+       .num_resources = 1,
+};
+#endif
+
 /*
  * PXA I2C normal controller (main)
  */
@@ -960,13 +1030,13 @@ static struct spi_board_info ads7846_spi_board_info[] 
__initdata = {
 static struct platform_device *devices[] __initdata = {
        &gpio_keys,
        &egpio,
+       &strataflash,
        &pwm_backlight,
        &pasic3,
        &vads7846_device,
        &bq24022,
        &gpio_vbus,
        &power_supply,
-       &strataflash,
        &leds_gpio,
 
        /* NOTICE mutually exclusive with PXA I2C */
-- 
1.7.12.1

--
To unsubscribe from this list: send the line "unsubscribe linux-leds" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to