Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 54e92549 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

[media] em28xx: add support for DVB monitor led



Some devices have a LED to indicate when DVB capture started.
Add support for it.

Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 02bc1f55
Loading
Loading
Loading
Loading
+14 −12
Original line number Original line Diff line number Diff line
@@ -619,6 +619,7 @@ EXPORT_SYMBOL_GPL(em28xx_find_led);
int em28xx_capture_start(struct em28xx *dev, int start)
int em28xx_capture_start(struct em28xx *dev, int start)
{
{
	int rc;
	int rc;
	const struct em28xx_led *led = NULL;


	if (dev->chip_id == CHIP_ID_EM2874 ||
	if (dev->chip_id == CHIP_ID_EM2874 ||
	    dev->chip_id == CHIP_ID_EM2884 ||
	    dev->chip_id == CHIP_ID_EM2884 ||
@@ -643,6 +644,8 @@ int em28xx_capture_start(struct em28xx *dev, int start)


			/* Enable video capture */
			/* Enable video capture */
			rc = em28xx_write_reg(dev, 0x48, 0x00);
			rc = em28xx_write_reg(dev, 0x48, 0x00);
			if (rc < 0)
				return rc;


			if (dev->mode == EM28XX_ANALOG_MODE)
			if (dev->mode == EM28XX_ANALOG_MODE)
				rc = em28xx_write_reg(dev,
				rc = em28xx_write_reg(dev,
@@ -650,6 +653,8 @@ int em28xx_capture_start(struct em28xx *dev, int start)
			else
			else
				rc = em28xx_write_reg(dev,
				rc = em28xx_write_reg(dev,
						    EM28XX_R12_VINENABLE, 0x37);
						    EM28XX_R12_VINENABLE, 0x37);
			if (rc < 0)
				return rc;


			msleep(6);
			msleep(6);
		} else {
		} else {
@@ -658,19 +663,16 @@ int em28xx_capture_start(struct em28xx *dev, int start)
		}
		}
	}
	}


	if (rc < 0)
	if (dev->mode == EM28XX_ANALOG_MODE)
		return rc;

	/* Switch (explicitly controlled) analog capturing LED on/off */
	if (dev->mode == EM28XX_ANALOG_MODE) {
		const struct em28xx_led *led;
		led = em28xx_find_led(dev, EM28XX_LED_ANALOG_CAPTURING);
		led = em28xx_find_led(dev, EM28XX_LED_ANALOG_CAPTURING);
	else
		led = em28xx_find_led(dev, EM28XX_LED_DIGITAL_CAPTURING);

	if (led)
	if (led)
		em28xx_write_reg_bits(dev, led->gpio_reg,
		em28xx_write_reg_bits(dev, led->gpio_reg,
				      (!start ^ led->inverted) ?
				      (!start ^ led->inverted) ?
				      ~led->gpio_mask : led->gpio_mask,
				      ~led->gpio_mask : led->gpio_mask,
				      led->gpio_mask);
				      led->gpio_mask);
	}


	return rc;
	return rc;
}
}
+1 −0
Original line number Original line Diff line number Diff line
@@ -401,6 +401,7 @@ enum em28xx_adecoder {


enum em28xx_led_role {
enum em28xx_led_role {
	EM28XX_LED_ANALOG_CAPTURING = 0,
	EM28XX_LED_ANALOG_CAPTURING = 0,
	EM28XX_LED_DIGITAL_CAPTURING,
	EM28XX_LED_ILLUMINATION,
	EM28XX_LED_ILLUMINATION,
	EM28XX_NUM_LED_ROLES, /* must be the last */
	EM28XX_NUM_LED_ROLES, /* must be the last */
};
};