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

Commit 6b8a3170 authored by Frank Schaefer's avatar Frank Schaefer Committed by Mauro Carvalho Chehab
Browse files

[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: default avatarFrank Schäfer <fschaefer.oss@googlemail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 7763481a
Loading
Loading
Loading
Loading
+24 −7
Original line number Diff line number Diff line
@@ -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,9 +661,10 @@ 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;
	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,
+9 −1
Original line number Diff line number Diff line
@@ -377,7 +377,13 @@ enum em28xx_adecoder {
	EM28XX_TVAUDIO,
};

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

struct em28xx_led {
	enum em28xx_led_role role;
	u8 gpio_reg;
	u8 gpio_mask;
	bool inverted;
@@ -433,7 +439,7 @@ struct em28xx_board {
	char			  *ir_codes;

	/* LEDs that need to be controlled explicitly */
	struct em28xx_led	  *analog_capturing_led;
	struct em28xx_led	  *leds;

	/* Buttons */
	struct em28xx_button	  *buttons;
@@ -711,6 +717,8 @@ int em28xx_audio_analog_set(struct em28xx *dev);
int em28xx_audio_setup(struct em28xx *dev);

int em28xx_colorlevels_set_default(struct em28xx *dev);
const struct em28xx_led *em28xx_find_led(struct em28xx *dev,
					 enum em28xx_led_role role);
int em28xx_capture_start(struct em28xx *dev, int start);
int em28xx_vbi_supported(struct em28xx *dev);
int em28xx_set_outfmt(struct em28xx *dev);