diff options
author | Marc Zyngier <Marc.Zyngier@arm.com> | 2011-05-18 05:51:55 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-05-20 17:27:34 -0400 |
commit | 667f390bee987d45351402e42008c52cdfb77d76 (patch) | |
tree | 93b6a563915a4013c842302dd45dc3b4ee926d4e /drivers/mtd/maps/pismo.c | |
parent | adf0040096e4b45b9d1c12f59f9045951178ca00 (diff) |
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: Jean-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: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Acked-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers/mtd/maps/pismo.c')
-rw-r--r-- | drivers/mtd/maps/pismo.c | 40 |
1 files changed, 3 insertions, 37 deletions
diff --git a/drivers/mtd/maps/pismo.c b/drivers/mtd/maps/pismo.c index f4ce273e93fd..65bd1cd4d627 100644 --- a/drivers/mtd/maps/pismo.c +++ b/drivers/mtd/maps/pismo.c | |||
@@ -50,39 +50,13 @@ struct pismo_data { | |||
50 | struct platform_device *dev[PISMO_NUM_CS]; | 50 | struct platform_device *dev[PISMO_NUM_CS]; |
51 | }; | 51 | }; |
52 | 52 | ||
53 | /* FIXME: set_vpp could do with a better calling convention */ | 53 | static void pismo_set_vpp(struct platform_device *pdev, int on) |
54 | static struct pismo_data *vpp_pismo; | ||
55 | static DEFINE_MUTEX(pismo_mutex); | ||
56 | |||
57 | static int pismo_setvpp_probe_fix(struct pismo_data *pismo) | ||
58 | { | 54 | { |
59 | mutex_lock(&pismo_mutex); | 55 | struct i2c_client *client = to_i2c_client(pdev->dev.parent); |
60 | if (vpp_pismo) { | 56 | struct pismo_data *pismo = i2c_get_clientdata(client); |
61 | mutex_unlock(&pismo_mutex); | ||
62 | kfree(pismo); | ||
63 | return -EBUSY; | ||
64 | } | ||
65 | vpp_pismo = pismo; | ||
66 | mutex_unlock(&pismo_mutex); | ||
67 | return 0; | ||
68 | } | ||
69 | |||
70 | static void pismo_setvpp_remove_fix(struct pismo_data *pismo) | ||
71 | { | ||
72 | mutex_lock(&pismo_mutex); | ||
73 | if (vpp_pismo == pismo) | ||
74 | vpp_pismo = NULL; | ||
75 | mutex_unlock(&pismo_mutex); | ||
76 | } | ||
77 | |||
78 | static void pismo_set_vpp(struct map_info *map, int on) | ||
79 | { | ||
80 | struct pismo_data *pismo = vpp_pismo; | ||
81 | 57 | ||
82 | pismo->vpp(pismo->vpp_data, on); | 58 | pismo->vpp(pismo->vpp_data, on); |
83 | } | 59 | } |
84 | /* end of hack */ | ||
85 | |||
86 | 60 | ||
87 | static unsigned int __devinit pismo_width_to_bytes(unsigned int width) | 61 | static unsigned int __devinit pismo_width_to_bytes(unsigned int width) |
88 | { | 62 | { |
@@ -231,9 +205,6 @@ static int __devexit pismo_remove(struct i2c_client *client) | |||
231 | for (i = 0; i < ARRAY_SIZE(pismo->dev); i++) | 205 | for (i = 0; i < ARRAY_SIZE(pismo->dev); i++) |
232 | platform_device_unregister(pismo->dev[i]); | 206 | platform_device_unregister(pismo->dev[i]); |
233 | 207 | ||
234 | /* FIXME: set_vpp needs saner arguments */ | ||
235 | pismo_setvpp_remove_fix(pismo); | ||
236 | |||
237 | kfree(pismo); | 208 | kfree(pismo); |
238 | 209 | ||
239 | return 0; | 210 | return 0; |
@@ -257,11 +228,6 @@ static int __devinit pismo_probe(struct i2c_client *client, | |||
257 | if (!pismo) | 228 | if (!pismo) |
258 | return -ENOMEM; | 229 | return -ENOMEM; |
259 | 230 | ||
260 | /* FIXME: set_vpp needs saner arguments */ | ||
261 | ret = pismo_setvpp_probe_fix(pismo); | ||
262 | if (ret) | ||
263 | return ret; | ||
264 | |||
265 | pismo->client = client; | 231 | pismo->client = client; |
266 | if (pdata) { | 232 | if (pdata) { |
267 | pismo->vpp = pdata->set_vpp; | 233 | pismo->vpp = pdata->set_vpp; |