summaryrefslogtreecommitdiffstats
path: root/drivers/media/usb/em28xx/em28xx-core.c
diff options
context:
space:
mode:
authorFrank Schaefer <fschaefer.oss@googlemail.com>2013-12-01 18:06:55 -0300
committerMauro Carvalho Chehab <m.chehab@samsung.com>2013-12-10 16:18:40 -0200
commit6b8a3170c9984be58e50e23c78e2eb7833f33c4c (patch)
tree9473b6db87b54c412b1a987965cacfe4f709a6e0 /drivers/media/usb/em28xx/em28xx-core.c
parent7763481a97488f201e7b6a42ddce1d163cd6297a (diff)
downloadop-kernel-dev-6b8a3170c9984be58e50e23c78e2eb7833f33c4c.zip
op-kernel-dev-6b8a3170c9984be58e50e23c78e2eb7833f33c4c.tar.gz
[media] em28xx: prepare for supporting multiple LEDs
Introduce a LED role and store all LEDs in an array. Also provide a helper function to retrieve a specific LED. Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media/usb/em28xx/em28xx-core.c')
-rw-r--r--drivers/media/usb/em28xx/em28xx-core.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/drivers/media/usb/em28xx/em28xx-core.c b/drivers/media/usb/em28xx/em28xx-core.c
index 31d6ab2..4a8179a 100644
--- a/drivers/media/usb/em28xx/em28xx-core.c
+++ b/drivers/media/usb/em28xx/em28xx-core.c
@@ -600,6 +600,22 @@ int em28xx_colorlevels_set_default(struct em28xx *dev)
return em28xx_write_reg(dev, EM28XX_R1A_BOFFSET, 0x00);
}
+const struct em28xx_led *em28xx_find_led(struct em28xx *dev,
+ enum em28xx_led_role role)
+{
+ if (dev->board.leds) {
+ u8 k = 0;
+ while (dev->board.leds[k].role >= 0 &&
+ dev->board.leds[k].role < EM28XX_NUM_LED_ROLES) {
+ if (dev->board.leds[k].role == role)
+ return &dev->board.leds[k];
+ k++;
+ }
+ }
+ return NULL;
+}
+EXPORT_SYMBOL_GPL(em28xx_find_led);
+
int em28xx_capture_start(struct em28xx *dev, int start)
{
int rc;
@@ -645,13 +661,14 @@ int em28xx_capture_start(struct em28xx *dev, int start)
return rc;
/* Switch (explicitly controlled) analog capturing LED on/off */
- if ((dev->mode == EM28XX_ANALOG_MODE)
- && dev->board.analog_capturing_led) {
- struct em28xx_led *led = dev->board.analog_capturing_led;
- em28xx_write_reg_bits(dev, led->gpio_reg,
- (!start ^ led->inverted) ?
- ~led->gpio_mask : led->gpio_mask,
- led->gpio_mask);
+ if (dev->mode == EM28XX_ANALOG_MODE) {
+ const struct em28xx_led *led;
+ led = em28xx_find_led(dev, EM28XX_LED_ANALOG_CAPTURING);
+ if (led)
+ em28xx_write_reg_bits(dev, led->gpio_reg,
+ (!start ^ led->inverted) ?
+ ~led->gpio_mask : led->gpio_mask,
+ led->gpio_mask);
}
return rc;
OpenPOWER on IntegriCloud