Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 124204
b: refs/heads/master
c: 5c2231c
h: refs/heads/master
v: v3
  • Loading branch information
Devin Heitmueller authored and Mauro Carvalho Chehab committed Dec 29, 2008
1 parent 80e7c5d commit f122d44
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 67c96f67060abfe595974a77aeb4ce7815893648
refs/heads/master: 5c2231c84304563fd5d28e8bbb72e09e882a8e32
10 changes: 10 additions & 0 deletions trunk/drivers/media/video/em28xx/em28xx-reg.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,16 @@

/* em28xx registers */

#define EM28XX_R00_CHIPCFG 0x00

/* em28xx Chip Configuration 0x00 */
#define EM28XX_CHIPCFG_VENDOR_AUDIO 0x80
#define EM28XX_CHIPCFG_I2S_VOLUME_CAPABLE 0x40
#define EM28XX_CHIPCFG_I2S_3_SAMPRATES 0x30
#define EM28XX_CHIPCFG_I2S_5_SAMPRATES 0x20
#define EM28XX_CHIPCFG_AC97 0x10
#define EM28XX_CHIPCFG_AUDIOMASK 0x30

/* GPIO/GPO registers */
#define EM2880_R04_GPO 0x04 /* em2880-em2883 only */
#define EM28XX_R08_GPIO 0x08 /* em2820 or upper */
Expand Down
35 changes: 34 additions & 1 deletion trunk/drivers/media/video/em28xx/em28xx-video.c
Original file line number Diff line number Diff line change
Expand Up @@ -1933,16 +1933,49 @@ static struct video_device *em28xx_vdev_init(struct em28xx *dev,

int em28xx_supports_audio_extension(struct em28xx *dev)
{
int rc;

/* The chip dictates whether we support the Empia analog audio
extension */
switch (dev->chip_id) {
case CHIP_ID_EM2874:
/* Either a digital-only device or provides AC97 audio */
/* Digital only device - no analog support */
dev->audio_mode = EM28XX_NO_AUDIO;
return 0;
case CHIP_ID_EM2860:
case CHIP_ID_EM2883:
default:
/* See how this device is configured */
rc = em28xx_read_reg(dev, EM28XX_R00_CHIPCFG);
if (rc & EM28XX_CHIPCFG_VENDOR_AUDIO) {
switch(rc & EM28XX_CHIPCFG_AUDIOMASK) {
case EM28XX_CHIPCFG_AC97:
em28xx_info("AC97 audio (5 sample rates)\n");
dev->audio_mode = EM28XX_AC97;
break;
case EM28XX_CHIPCFG_I2S_3_SAMPRATES:
em28xx_info("I2S Audio (3 sample rates)\n");
dev->audio_mode = EM28XX_I2S_3_SAMPLE_RATES;
break;
case EM28XX_CHIPCFG_I2S_5_SAMPRATES:
em28xx_info("I2S Audio (5 sample rates)\n");
dev->audio_mode = EM28XX_I2S_5_SAMPLE_RATES;
break;
default:
em28xx_info("No audio support detected\n");
dev->audio_mode = EM28XX_NO_AUDIO;
return 0;
}
} else {
em28xx_info("USB Audio class device\n");
return 0;
}
/* The em28xx audio extension needs to be loaded */
return 1;
}

/* We should never reach this point */
return 0;
}

static int register_analog_devices(struct em28xx *dev)
Expand Down
8 changes: 8 additions & 0 deletions trunk/drivers/media/video/em28xx/em28xx.h
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,13 @@ enum enum28xx_itype {
EM28XX_RADIO,
};

enum em28xx_audio_mode {
EM28XX_NO_AUDIO,
EM28XX_I2S_3_SAMPLE_RATES,
EM28XX_I2S_5_SAMPLE_RATES,
EM28XX_AC97,
};

enum em28xx_amux {
EM28XX_AMUX_VIDEO,
EM28XX_AMUX_LINE_IN,
Expand Down Expand Up @@ -403,6 +410,7 @@ struct em28xx {
u32 i2s_speed; /* I2S speed for audio digital stream */

enum em28xx_decoder decoder;
enum em28xx_audio_mode audio_mode;

int tuner_type; /* type of the tuner */
int tuner_addr; /* tuner address */
Expand Down

0 comments on commit f122d44

Please sign in to comment.