diff options
-rw-r--r-- | arch/arm/mach-omap2/board-rx51-peripherals.c | 7 | ||||
-rw-r--r-- | drivers/media/radio/si4713/si4713.c | 52 | ||||
-rw-r--r-- | drivers/media/radio/si4713/si4713.h | 3 | ||||
-rw-r--r-- | include/media/si4713.h | 2 |
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 | ||
763 | static const char * const si4713_supply_names[] = { | ||
764 | "vio", | ||
765 | "vdd", | ||
766 | }; | ||
767 | |||
763 | static struct si4713_platform_data rx51_si4713_i2c_data __initdata_or_module = { | 768 | static 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>"); | |||
44 | MODULE_DESCRIPTION("I2C driver for Si4713 FM Radio Transmitter"); | 44 | MODULE_DESCRIPTION("I2C driver for Si4713 FM Radio Transmitter"); |
45 | MODULE_VERSION("0.0.1"); | 45 | MODULE_VERSION("0.0.1"); |
46 | 46 | ||
47 | static 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: | |||
1500 | free_ctrls: | 1500 | free_ctrls: |
1501 | v4l2_ctrl_handler_free(hdl); | 1501 | v4l2_ctrl_handler_free(hdl); |
1502 | put_reg: | 1502 | put_reg: |
1503 | regulator_bulk_free(ARRAY_SIZE(sdev->supplies), sdev->supplies); | 1503 | regulator_bulk_free(sdev->supplies, sdev->supply_data); |
1504 | free_gpio: | 1504 | free_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 | */ |
25 | struct si4713_platform_data { | 25 | struct 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 | ||