aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDinesh Ram <Dinesh.Ram@cern.ch>2013-10-15 11:24:44 -0400
committerMauro Carvalho Chehab <m.chehab@samsung.com>2013-12-18 03:40:07 -0500
commitcc6d618fdf56df389e46be2f0c9f2d1579d8b9e6 (patch)
treee8ed42a9ec355329c19133c8847a8b276c2a3708
parent99995dedea0e956ff58692fd795b8a8a0669e3a5 (diff)
[media] si4713: move supply list to si4713_platform_data
The supply list is needed by the platform driver, but not by the usb driver. So this information belongs to the platform data and should not be hardcoded in the subdevice driver. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Tested-by: Eduardo Valentin <edubezval@gmail.com> Acked-by: Eduardo Valentin <edubezval@gmail.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
-rw-r--r--arch/arm/mach-omap2/board-rx51-peripherals.c7
-rw-r--r--drivers/media/radio/si4713/si4713.c52
-rw-r--r--drivers/media/radio/si4713/si4713.h3
-rw-r--r--include/media/si4713.h2
4 files changed, 37 insertions, 27 deletions
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c
index f093af17f5e6..8760bbe3baab 100644
--- a/arch/arm/mach-omap2/board-rx51-peripherals.c
+++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
@@ -760,7 +760,14 @@ static struct regulator_init_data rx51_vintdig = {
760 }, 760 },
761}; 761};
762 762
763static const char * const si4713_supply_names[] = {
764 "vio",
765 "vdd",
766};
767
763static struct si4713_platform_data rx51_si4713_i2c_data __initdata_or_module = { 768static struct si4713_platform_data rx51_si4713_i2c_data __initdata_or_module = {
769 .supplies = ARRAY_SIZE(si4713_supply_names),
770 .supply_names = si4713_supply_names,
764 .gpio_reset = RX51_FMTX_RESET_GPIO, 771 .gpio_reset = RX51_FMTX_RESET_GPIO,
765}; 772};
766 773
diff --git a/drivers/media/radio/si4713/si4713.c b/drivers/media/radio/si4713/si4713.c
index 4931325111c2..097d4e09b491 100644
--- a/drivers/media/radio/si4713/si4713.c
+++ b/drivers/media/radio/si4713/si4713.c
@@ -44,11 +44,6 @@ MODULE_AUTHOR("Eduardo Valentin <eduardo.valentin@nokia.com>");
44MODULE_DESCRIPTION("I2C driver for Si4713 FM Radio Transmitter"); 44MODULE_DESCRIPTION("I2C driver for Si4713 FM Radio Transmitter");
45MODULE_VERSION("0.0.1"); 45MODULE_VERSION("0.0.1");
46 46
47static const char *si4713_supply_names[SI4713_NUM_SUPPLIES] = {
48 "vio",
49 "vdd",
50};
51
52#define DEFAULT_RDS_PI 0x00 47#define DEFAULT_RDS_PI 0x00
53#define DEFAULT_RDS_PTY 0x00 48#define DEFAULT_RDS_PTY 0x00
54#define DEFAULT_RDS_DEVIATION 0x00C8 49#define DEFAULT_RDS_DEVIATION 0x00C8
@@ -368,11 +363,12 @@ static int si4713_powerup(struct si4713_device *sdev)
368 if (sdev->power_state) 363 if (sdev->power_state)
369 return 0; 364 return 0;
370 365
371 err = regulator_bulk_enable(ARRAY_SIZE(sdev->supplies), 366 if (sdev->supplies) {
372 sdev->supplies); 367 err = regulator_bulk_enable(sdev->supplies, sdev->supply_data);
373 if (err) { 368 if (err) {
374 v4l2_err(&sdev->sd, "Failed to enable supplies: %d\n", err); 369 v4l2_err(&sdev->sd, "Failed to enable supplies: %d\n", err);
375 return err; 370 return err;
371 }
376 } 372 }
377 if (gpio_is_valid(sdev->gpio_reset)) { 373 if (gpio_is_valid(sdev->gpio_reset)) {
378 udelay(50); 374 udelay(50);
@@ -396,11 +392,12 @@ static int si4713_powerup(struct si4713_device *sdev)
396 if (client->irq) 392 if (client->irq)
397 err = si4713_write_property(sdev, SI4713_GPO_IEN, 393 err = si4713_write_property(sdev, SI4713_GPO_IEN,
398 SI4713_STC_INT | SI4713_CTS); 394 SI4713_STC_INT | SI4713_CTS);
399 } else { 395 return err;
400 if (gpio_is_valid(sdev->gpio_reset)) 396 }
401 gpio_set_value(sdev->gpio_reset, 0); 397 if (gpio_is_valid(sdev->gpio_reset))
402 err = regulator_bulk_disable(ARRAY_SIZE(sdev->supplies), 398 gpio_set_value(sdev->gpio_reset, 0);
403 sdev->supplies); 399 if (sdev->supplies) {
400 err = regulator_bulk_disable(sdev->supplies, sdev->supply_data);
404 if (err) 401 if (err)
405 v4l2_err(&sdev->sd, 402 v4l2_err(&sdev->sd,
406 "Failed to disable supplies: %d\n", err); 403 "Failed to disable supplies: %d\n", err);
@@ -432,11 +429,13 @@ static int si4713_powerdown(struct si4713_device *sdev)
432 v4l2_dbg(1, debug, &sdev->sd, "Device in reset mode\n"); 429 v4l2_dbg(1, debug, &sdev->sd, "Device in reset mode\n");
433 if (gpio_is_valid(sdev->gpio_reset)) 430 if (gpio_is_valid(sdev->gpio_reset))
434 gpio_set_value(sdev->gpio_reset, 0); 431 gpio_set_value(sdev->gpio_reset, 0);
435 err = regulator_bulk_disable(ARRAY_SIZE(sdev->supplies), 432 if (sdev->supplies) {
436 sdev->supplies); 433 err = regulator_bulk_disable(sdev->supplies,
437 if (err) 434 sdev->supply_data);
438 v4l2_err(&sdev->sd, 435 if (err)
439 "Failed to disable supplies: %d\n", err); 436 v4l2_err(&sdev->sd,
437 "Failed to disable supplies: %d\n", err);
438 }
440 sdev->power_state = POWER_OFF; 439 sdev->power_state = POWER_OFF;
441 } 440 }
442 441
@@ -1381,13 +1380,14 @@ static int si4713_probe(struct i2c_client *client,
1381 } 1380 }
1382 sdev->gpio_reset = pdata->gpio_reset; 1381 sdev->gpio_reset = pdata->gpio_reset;
1383 gpio_direction_output(sdev->gpio_reset, 0); 1382 gpio_direction_output(sdev->gpio_reset, 0);
1383 sdev->supplies = pdata->supplies;
1384 } 1384 }
1385 1385
1386 for (i = 0; i < ARRAY_SIZE(sdev->supplies); i++) 1386 for (i = 0; i < sdev->supplies; i++)
1387 sdev->supplies[i].supply = si4713_supply_names[i]; 1387 sdev->supply_data[i].supply = pdata->supply_names[i];
1388 1388
1389 rval = regulator_bulk_get(&client->dev, ARRAY_SIZE(sdev->supplies), 1389 rval = regulator_bulk_get(&client->dev, sdev->supplies,
1390 sdev->supplies); 1390 sdev->supply_data);
1391 if (rval) { 1391 if (rval) {
1392 dev_err(&client->dev, "Cannot get regulators: %d\n", rval); 1392 dev_err(&client->dev, "Cannot get regulators: %d\n", rval);
1393 goto free_gpio; 1393 goto free_gpio;
@@ -1500,7 +1500,7 @@ free_irq:
1500free_ctrls: 1500free_ctrls:
1501 v4l2_ctrl_handler_free(hdl); 1501 v4l2_ctrl_handler_free(hdl);
1502put_reg: 1502put_reg:
1503 regulator_bulk_free(ARRAY_SIZE(sdev->supplies), sdev->supplies); 1503 regulator_bulk_free(sdev->supplies, sdev->supply_data);
1504free_gpio: 1504free_gpio:
1505 if (gpio_is_valid(sdev->gpio_reset)) 1505 if (gpio_is_valid(sdev->gpio_reset))
1506 gpio_free(sdev->gpio_reset); 1506 gpio_free(sdev->gpio_reset);
@@ -1524,7 +1524,7 @@ static int si4713_remove(struct i2c_client *client)
1524 1524
1525 v4l2_device_unregister_subdev(sd); 1525 v4l2_device_unregister_subdev(sd);
1526 v4l2_ctrl_handler_free(sd->ctrl_handler); 1526 v4l2_ctrl_handler_free(sd->ctrl_handler);
1527 regulator_bulk_free(ARRAY_SIZE(sdev->supplies), sdev->supplies); 1527 regulator_bulk_free(sdev->supplies, sdev->supply_data);
1528 if (gpio_is_valid(sdev->gpio_reset)) 1528 if (gpio_is_valid(sdev->gpio_reset))
1529 gpio_free(sdev->gpio_reset); 1529 gpio_free(sdev->gpio_reset);
1530 kfree(sdev); 1530 kfree(sdev);
diff --git a/drivers/media/radio/si4713/si4713.h b/drivers/media/radio/si4713/si4713.h
index 1410cd23105a..4837cf6e0e1b 100644
--- a/drivers/media/radio/si4713/si4713.h
+++ b/drivers/media/radio/si4713/si4713.h
@@ -227,7 +227,8 @@ struct si4713_device {
227 struct v4l2_ctrl *tune_ant_cap; 227 struct v4l2_ctrl *tune_ant_cap;
228 }; 228 };
229 struct completion work; 229 struct completion work;
230 struct regulator_bulk_data supplies[SI4713_NUM_SUPPLIES]; 230 unsigned supplies;
231 struct regulator_bulk_data supply_data[SI4713_NUM_SUPPLIES];
231 int gpio_reset; 232 int gpio_reset;
232 u32 power_state; 233 u32 power_state;
233 u32 rds_enabled; 234 u32 rds_enabled;
diff --git a/include/media/si4713.h b/include/media/si4713.h
index ed7353e8a982..f98a0a7af61c 100644
--- a/include/media/si4713.h
+++ b/include/media/si4713.h
@@ -23,6 +23,8 @@
23 * Platform dependent definition 23 * Platform dependent definition
24 */ 24 */
25struct si4713_platform_data { 25struct si4713_platform_data {
26 const char * const *supply_names;
27 unsigned supplies;
26 int gpio_reset; /* < 0 if not used */ 28 int gpio_reset; /* < 0 if not used */
27}; 29};
28 30