From 52227110efbe3a7e7b28a0aa7185b126a6d3b9d7 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Thu, 15 Nov 2007 12:58:00 -0200 Subject: Add a modprobe option to manually select audio standard From: Mauro Carvalho Chehab While there's no public API to define audio standard, adds a hack option for select them. This is needed only for NICAM and A2 firmwares, since AM, BTSC and EAIJ are already properly handled, on firmware version 2.7. Signed-off-by: Mauro Carvalho Chehab --- linux/drivers/media/video/tuner-xc2028.c | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'linux/drivers/media') diff --git a/linux/drivers/media/video/tuner-xc2028.c b/linux/drivers/media/video/tuner-xc2028.c index 3378c8d91..40f785bed 100644 --- a/linux/drivers/media/video/tuner-xc2028.c +++ b/linux/drivers/media/video/tuner-xc2028.c @@ -36,6 +36,20 @@ static int debug; module_param(debug, int, 0644); MODULE_PARM_DESC(debug, "enable verbose debug messages"); +static char audio_std[8]; +module_param_string(audio_std, audio_std, sizeof(audio_std), 0); +MODULE_PARM_DESC(audio_std, + "Audio standard. XC3028 audio decoder explicitly " + "needs to know what audio\n" + "standard is needed for some video standards with audio A2 or NICAM.\n" + "The valid values are:\n" + "A2\n" + "A2/A\n" + "A2/B\n" + "NICAM\n" + "NICAM/A\n" + "NICAM/B\n"); + static LIST_HEAD(xc2028_list); /* struct for storing firmware table */ struct firmware_description { @@ -192,6 +206,24 @@ void dump_firm_type(unsigned int type) printk("SCODE "); } +static v4l2_std_id parse_audio_std_option(void) +{ + if (strcasecmp(audio_std, "A2")) + return V4L2_STD_A2; + if (strcasecmp(audio_std, "A2/A")) + return V4L2_STD_A2_A; + if (strcasecmp(audio_std, "A2/B")) + return V4L2_STD_A2_B; + if (strcasecmp(audio_std, "NICAM")) + return V4L2_STD_NICAM; + if (strcasecmp(audio_std, "NICAM/A")) + return V4L2_STD_NICAM_A; + if (strcasecmp(audio_std, "NICAM/B")) + return V4L2_STD_NICAM_B; + + return 0; +} + static void free_firmware(struct xc2028_data *priv) { int i; @@ -625,6 +657,9 @@ static int check_firmware(struct dvb_frontend *fe, enum tuner_mode new_mode, return 0; } + /* Add audio hack to std mask */ + std |= parse_audio_std_option(); + rc = load_firmware(fe, type, &std); if (rc < 0) return rc; -- cgit v1.2.3