Commit 667f390b authored by Marc Zyngier's avatar Marc Zyngier Committed by Russell King

ARM: 6910/1: MTD: physmap: let set_vpp() pass a platform_device instead of a map_info

The set_vpp() method provided by physmap passes a map_info back to
the platform code, which has little relevance as far as the platform
is concerned (this parameter is completely unused).

Instead, pass the platform_device, which can be used in the pismo
driver to retrieve some important information in a nicer way, instead
of the hack that was in place.

The empty set_vpp function in board-at572d940hf_ek.c is left untouched,
as the board/SoC is scheduled for removal.

Cc: Andrew Victor <linux@maxim.org.za>
Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: default avatarJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: Philipp Zabel <philipp.zabel@gmail.com>
Cc: Eric Miao <eric.y.miao@gmail.com>
Cc: Ben Dooks <ben-linux@fluff.org>
Acked-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Acked-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent adf00400
...@@ -263,7 +263,7 @@ static void ap_flash_exit(struct platform_device *dev) ...@@ -263,7 +263,7 @@ static void ap_flash_exit(struct platform_device *dev)
} }
} }
static void ap_flash_set_vpp(struct map_info *map, int on) static void ap_flash_set_vpp(struct platform_device *pdev, int on)
{ {
void __iomem *reg = on ? SC_CTRLS : SC_CTRLC; void __iomem *reg = on ? SC_CTRLS : SC_CTRLC;
......
...@@ -259,7 +259,7 @@ static void intcp_flash_exit(struct platform_device *dev) ...@@ -259,7 +259,7 @@ static void intcp_flash_exit(struct platform_device *dev)
writel(val, INTCP_VA_CTRL_BASE + INTCP_FLASHPROG); writel(val, INTCP_VA_CTRL_BASE + INTCP_FLASHPROG);
} }
static void intcp_flash_set_vpp(struct map_info *map, int on) static void intcp_flash_set_vpp(struct platform_device *pdev, int on)
{ {
u32 val; u32 val;
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#include <plat/tc.h> #include <plat/tc.h>
#include <plat/flash.h> #include <plat/flash.h>
void omap1_set_vpp(struct map_info *map, int enable) void omap1_set_vpp(struct platform_device *pdev, int enable)
{ {
static int count; static int count;
u32 l; u32 l;
......
...@@ -735,7 +735,7 @@ static struct platform_device bq24022 = { ...@@ -735,7 +735,7 @@ static struct platform_device bq24022 = {
* StrataFlash * StrataFlash
*/ */
static void hx4700_set_vpp(struct map_info *map, int vpp) static void hx4700_set_vpp(struct platform_device *pdev, int vpp)
{ {
gpio_set_value(GPIO91_HX4700_FLASH_VPEN, vpp); gpio_set_value(GPIO91_HX4700_FLASH_VPEN, vpp);
} }
......
...@@ -662,7 +662,7 @@ static struct pxaohci_platform_data magician_ohci_info = { ...@@ -662,7 +662,7 @@ static struct pxaohci_platform_data magician_ohci_info = {
* StrataFlash * StrataFlash
*/ */
static void magician_set_vpp(struct map_info *map, int vpp) static void magician_set_vpp(struct platform_device *pdev, int vpp)
{ {
gpio_set_value(EGPIO_MAGICIAN_FLASH_VPP, vpp); gpio_set_value(EGPIO_MAGICIAN_FLASH_VPP, vpp);
} }
......
...@@ -77,7 +77,7 @@ void __init realview_adjust_zones(unsigned long *size, unsigned long *hole) ...@@ -77,7 +77,7 @@ void __init realview_adjust_zones(unsigned long *size, unsigned long *hole)
#define REALVIEW_FLASHCTRL (__io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_FLASH_OFFSET) #define REALVIEW_FLASHCTRL (__io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_FLASH_OFFSET)
static void realview_flash_set_vpp(struct map_info *map, int on) static void realview_flash_set_vpp(struct platform_device *pdev, int on)
{ {
u32 val; u32 val;
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#include "nor-simtec.h" #include "nor-simtec.h"
static void simtec_nor_vpp(struct map_info *map, int vpp) static void simtec_nor_vpp(struct platform_device *pdev, int vpp)
{ {
unsigned int val; unsigned int val;
unsigned long flags; unsigned long flags;
......
...@@ -190,7 +190,7 @@ void __init versatile_map_io(void) ...@@ -190,7 +190,7 @@ void __init versatile_map_io(void)
#define VERSATILE_FLASHCTRL (__io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_FLASH_OFFSET) #define VERSATILE_FLASHCTRL (__io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_FLASH_OFFSET)
static void versatile_flash_set_vpp(struct map_info *map, int on) static void versatile_flash_set_vpp(struct platform_device *pdev, int on)
{ {
u32 val; u32 val;
......
...@@ -206,7 +206,7 @@ static struct platform_device v2m_usb_device = { ...@@ -206,7 +206,7 @@ static struct platform_device v2m_usb_device = {
.dev.platform_data = &v2m_usb_config, .dev.platform_data = &v2m_usb_config,
}; };
static void v2m_flash_set_vpp(struct map_info *map, int on) static void v2m_flash_set_vpp(struct platform_device *pdev, int on)
{ {
writel(on != 0, MMIO_P2V(V2M_SYS_FLASH)); writel(on != 0, MMIO_P2V(V2M_SYS_FLASH));
} }
......
...@@ -11,6 +11,6 @@ ...@@ -11,6 +11,6 @@
#include <linux/mtd/map.h> #include <linux/mtd/map.h>
extern void omap1_set_vpp(struct map_info *map, int enable); extern void omap1_set_vpp(struct platform_device *pdev, int enable);
#endif #endif
...@@ -74,6 +74,18 @@ static int physmap_flash_remove(struct platform_device *dev) ...@@ -74,6 +74,18 @@ static int physmap_flash_remove(struct platform_device *dev)
return 0; return 0;
} }
static void physmap_set_vpp(struct map_info *map, int state)
{
struct platform_device *pdev;
struct physmap_flash_data *physmap_data;
pdev = (struct platform_device *)map->map_priv_1;
physmap_data = pdev->dev.platform_data;
if (physmap_data->set_vpp)
physmap_data->set_vpp(pdev, state);
}
static const char *rom_probe_types[] = { static const char *rom_probe_types[] = {
"cfi_probe", "cfi_probe",
"jedec_probe", "jedec_probe",
...@@ -81,10 +93,7 @@ static const char *rom_probe_types[] = { ...@@ -81,10 +93,7 @@ static const char *rom_probe_types[] = {
"map_rom", "map_rom",
NULL }; NULL };
#ifdef CONFIG_MTD_PARTITIONS #ifdef CONFIG_MTD_PARTITIONS
static const char *part_probe_types[] = { "cmdlinepart", "RedBoot", static const char *part_probe_types[] = { "cmdlinepart", "RedBoot", "afs",
#ifdef CONFIG_MTD_AFS_PARTS
"afs",
#endif
NULL }; NULL };
#endif #endif
...@@ -134,8 +143,9 @@ static int physmap_flash_probe(struct platform_device *dev) ...@@ -134,8 +143,9 @@ static int physmap_flash_probe(struct platform_device *dev)
info->map[i].phys = dev->resource[i].start; info->map[i].phys = dev->resource[i].start;
info->map[i].size = resource_size(&dev->resource[i]); info->map[i].size = resource_size(&dev->resource[i]);
info->map[i].bankwidth = physmap_data->width; info->map[i].bankwidth = physmap_data->width;
info->map[i].set_vpp = physmap_data->set_vpp; info->map[i].set_vpp = physmap_set_vpp;
info->map[i].pfow_base = physmap_data->pfow_base; info->map[i].pfow_base = physmap_data->pfow_base;
info->map[i].map_priv_1 = (unsigned long)dev;
info->map[i].virt = devm_ioremap(&dev->dev, info->map[i].phys, info->map[i].virt = devm_ioremap(&dev->dev, info->map[i].phys,
info->map[i].size); info->map[i].size);
......
...@@ -50,39 +50,13 @@ struct pismo_data { ...@@ -50,39 +50,13 @@ struct pismo_data {
struct platform_device *dev[PISMO_NUM_CS]; struct platform_device *dev[PISMO_NUM_CS];
}; };
/* FIXME: set_vpp could do with a better calling convention */ static void pismo_set_vpp(struct platform_device *pdev, int on)
static struct pismo_data *vpp_pismo;
static DEFINE_MUTEX(pismo_mutex);
static int pismo_setvpp_probe_fix(struct pismo_data *pismo)
{
mutex_lock(&pismo_mutex);
if (vpp_pismo) {
mutex_unlock(&pismo_mutex);
kfree(pismo);
return -EBUSY;
}
vpp_pismo = pismo;
mutex_unlock(&pismo_mutex);
return 0;
}
static void pismo_setvpp_remove_fix(struct pismo_data *pismo)
{
mutex_lock(&pismo_mutex);
if (vpp_pismo == pismo)
vpp_pismo = NULL;
mutex_unlock(&pismo_mutex);
}
static void pismo_set_vpp(struct map_info *map, int on)
{ {
struct pismo_data *pismo = vpp_pismo; struct i2c_client *client = to_i2c_client(pdev->dev.parent);
struct pismo_data *pismo = i2c_get_clientdata(client);
pismo->vpp(pismo->vpp_data, on); pismo->vpp(pismo->vpp_data, on);
} }
/* end of hack */
static unsigned int __devinit pismo_width_to_bytes(unsigned int width) static unsigned int __devinit pismo_width_to_bytes(unsigned int width)
{ {
...@@ -231,9 +205,6 @@ static int __devexit pismo_remove(struct i2c_client *client) ...@@ -231,9 +205,6 @@ static int __devexit pismo_remove(struct i2c_client *client)
for (i = 0; i < ARRAY_SIZE(pismo->dev); i++) for (i = 0; i < ARRAY_SIZE(pismo->dev); i++)
platform_device_unregister(pismo->dev[i]); platform_device_unregister(pismo->dev[i]);
/* FIXME: set_vpp needs saner arguments */
pismo_setvpp_remove_fix(pismo);
kfree(pismo); kfree(pismo);
return 0; return 0;
...@@ -257,11 +228,6 @@ static int __devinit pismo_probe(struct i2c_client *client, ...@@ -257,11 +228,6 @@ static int __devinit pismo_probe(struct i2c_client *client,
if (!pismo) if (!pismo)
return -ENOMEM; return -ENOMEM;
/* FIXME: set_vpp needs saner arguments */
ret = pismo_setvpp_probe_fix(pismo);
if (ret)
return ret;
pismo->client = client; pismo->client = client;
if (pdata) { if (pdata) {
pismo->vpp = pdata->set_vpp; pismo->vpp = pdata->set_vpp;
......
...@@ -24,7 +24,7 @@ struct physmap_flash_data { ...@@ -24,7 +24,7 @@ struct physmap_flash_data {
unsigned int width; unsigned int width;
int (*init)(struct platform_device *); int (*init)(struct platform_device *);
void (*exit)(struct platform_device *); void (*exit)(struct platform_device *);
void (*set_vpp)(struct map_info *, int); void (*set_vpp)(struct platform_device *, int);
unsigned int nr_parts; unsigned int nr_parts;
unsigned int pfow_base; unsigned int pfow_base;
char *probe_type; char *probe_type;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment