Commit df7fa09c authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

V4L/DVB (10654): em28xx: VideoMate For You USB TV box requires tvaudio



As reported by Vitaly Wool <vital@embeddedalley.com>:

> about half a year ago I posted the patch that basically enabled Compro
> VideoMate For You USB TV box support.
> The main problem is I couldn't get the sound working.
> So I kind of decomposed the box and found out the audio decoder chip
> used there was Philips TDA9874A. As far as I can see, it's not supported
> within the em28xx suite although it is for other TV tuner drivers.

A tvaudio modprobing confirms that tda9874a chip is accessible via i2c:

tvaudio: TV audio decoder + audio/video mux driver
tvaudio: known chips: tda9840, tda9873h, tda9874h/a, tda9850, tda9855, tea6300, tea6320, tea6420, tda8425, pic16c54 (PV951), ta8874z
tvaudio' 1-0058: chip found @ 0xb0
tvaudio' 1-0058: tvaudio': chip_read2: reg254=0x11
tvaudio' 1-0058: tvaudio': chip_read2: reg255=0x2
tvaudio' 1-0058: tda9874a_checkit(): DIC=0x11, SIC=0x2.
tvaudio' 1-0058: found tda9874a.
tvaudio' 1-0058: tda9874h/a found @ 0xb0 (em28xx #0)
tvaudio' 1-0058: tda9874h/a: chip_write: reg0=0x0
tvaudio' 1-0058: tda9874h/a: chip_write: reg1=0xc0
tvaudio' 1-0058: tda9874h/a: chip_write: reg2=0x2
tvaudio' 1-0058: tda9874h/a: chip_write: reg11=0x80
tvaudio' 1-0058: tda9874h/a: chip_write: reg12=0x0
tvaudio' 1-0058: tda9874h/a: chip_write: reg13=0x0
tvaudio' 1-0058: tda9874h/a: chip_write: reg14=0x1
tvaudio' 1-0058: tda9874h/a: chip_write: reg15=0x0
tvaudio' 1-0058: tda9874h/a: chip_write: reg16=0x14
tvaudio' 1-0058: tda9874h/a: chip_write: reg17=0x50
tvaudio' 1-0058: tda9874h/a: chip_write: reg18=0xf9
tvaudio' 1-0058: tda9874h/a: chip_write: reg19=0x80
tvaudio' 1-0058: tda9874h/a: chip_write: reg20=0x80
tvaudio' 1-0058: tda9874h/a: chip_write: reg24=0x80
tvaudio' 1-0058: tda9874h/a: chip_write: reg255=0x0
tvaudio' 1-0058: tda9874a_setup(): A2, B/G [0x00].
tvaudio' 1-0058: tda9874h/a: thread started]

This patch automatically loads tvaudio when needed (currently, only
with this board).

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 50144aee
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -1244,6 +1244,7 @@ struct em28xx_board em28xx_boards[] = {
		.tuner_type   = TUNER_LG_PAL_NEW_TAPC,
		.tuner_type   = TUNER_LG_PAL_NEW_TAPC,
		.tda9887_conf = TDA9887_PRESENT,
		.tda9887_conf = TDA9887_PRESENT,
		.decoder      = EM28XX_TVP5150,
		.decoder      = EM28XX_TVP5150,
		.adecoder     = EM28XX_TVAUDIO,
		.input        = { {
		.input        = { {
			.type     = EM28XX_VMUX_TELEVISION,
			.type     = EM28XX_VMUX_TELEVISION,
			.vmux     = TVP5150_COMPOSITE0,
			.vmux     = TVP5150_COMPOSITE0,
@@ -1917,6 +1918,8 @@ void em28xx_card_setup(struct em28xx *dev)
		request_module("tvp5150");
		request_module("tvp5150");
	if (dev->board.tuner_type != TUNER_ABSENT)
	if (dev->board.tuner_type != TUNER_ABSENT)
		request_module("tuner");
		request_module("tuner");
	if (dev->board.adecoder == EM28XX_TVAUDIO)
		request_module("tvaudio");
#endif
#endif


	em28xx_config_tuner(dev);
	em28xx_config_tuner(dev);
+6 −0
Original line number Original line Diff line number Diff line
@@ -357,6 +357,11 @@ enum em28xx_decoder {
	EM28XX_SAA711X,
	EM28XX_SAA711X,
};
};


enum em28xx_adecoder {
	EM28XX_NOADECODER = 0,
	EM28XX_TVAUDIO,
};

struct em28xx_board {
struct em28xx_board {
	char *name;
	char *name;
	int vchannels;
	int vchannels;
@@ -382,6 +387,7 @@ struct em28xx_board {
	unsigned char xclk, i2c_speed;
	unsigned char xclk, i2c_speed;


	enum em28xx_decoder decoder;
	enum em28xx_decoder decoder;
	enum em28xx_adecoder adecoder;


	struct em28xx_input       input[MAX_EM28XX_INPUT];
	struct em28xx_input       input[MAX_EM28XX_INPUT];
	struct em28xx_input	  radio;
	struct em28xx_input	  radio;