v4l: saa7134 driver update
PATCH 4/4 v4l: saa7134 driver update
Hi,
This is a minor update for the saa7134 driver. Changes:
* i2c cleanups (i2c_add_driver return value, add __init & __exit).
* fix radio tuning (last update broke this ...).
* adds support for new tv cards.
* add config info for the tda9887 (thus this one depends on the tuner update patch mailed earlier).
* add configuration help printk's for some cards, for stuff which can't be autodetected.
* make automute switchable via v4l2 API, without driver reload.
please apply,
Gerd
drivers/media/video/saa7134/saa6752hs.c +3 -4
@@ -387,13 +387,12 @@ static struct i2c_client client_template .driver = &driver, }; -static int saa6752hs_init_module (void ) +static int __init saa6752hs_init_module (void ) { -i2c_add_driver (&driver); -return 0 ; +return i2c_add_driver (&driver); } -static void saa6752hs_cleanup_module (void ) +static void __exit saa6752hs_cleanup_module(void) {i2c_del_driver (&driver); }
drivers/media/video/saa7134/saa7134-cards.c +115 -17
277 lines not on this page · raw message
drivers/media/video/saa7134/saa7134-core.c +4 -3
@@ -868,7 +868,8 @@ static int __devinit saa7134_initdev(strmust_configure_manually (); dev->board =SAA7134_BOARD_UNKNOWN ; } - dev->tuner_type = saa7134_boards[dev->board].tuner_type; + dev->tuner_type = saa7134_boards[dev->board].tuner_type; + dev->tda9887_conf = saa7134_boards[dev->board].tda9887_conf;if (UNSET != tuner[saa7134_devcount]) dev->tuner_type = tuner[saa7134_devcount]; printk(KERN_INFO "%s: subsystem: %04x:%04x, board: %s [card=%d,%s]\n",
@@ -919,7 +920,7 @@ static int __devinit saa7134_initdev(str/* load i2c helpers */ if (TUNER_ABSENT != dev->tuner_type)request_module ("tuner" ); -if (saa7134_boards[dev->board].need_tda9887) +if (dev->tda9887_conf)request_module ("tda9887" );if (card_has_ts (dev))request_module ("saa6752hs" );
@@ -949,7 +950,7 @@ static int __devinit saa7134_initdev(str dev->name); goto fail4; } -printk (KERN_INFO "%s: registered device video%d [ts]\n" , +printk (KERN_INFO "%s: registered device video%d [mpeg]\n" , dev->name,dev->ts_dev->minor &0x1f ); }
drivers/media/video/saa7134/saa7134-i2c.c +2 -0
@@ -327,8 +327,10 @@ static int attach_inform(struct i2c_clie {struct saa7134_dev *dev = client->adapter->algo_data;int tuner = dev->tuner_type; +int conf = dev->tda9887_conf;saa7134_i2c_call_clients (dev,TUNER_SET_TYPE ,&tuner); +saa7134_i2c_call_clients (dev,TDA9887_SET_CONFIG ,&conf);return 0 ; }
drivers/media/video/saa7134/saa7134-input.c +8 -8
@@ -158,7 +158,7 @@ static IR_KEYTAB_TYPE eztv_codes[IR_KEYT [ 13 ] = KEY_KP7, [ 14 ] = KEY_KP8, [ 15 ] = KEY_KP9, - + [ 42 ] = KEY_VOLUMEUP, [ 17 ] = KEY_VOLUMEDOWN, [ 24 ] = KEY_CHANNELUP, // CH.tracking up
@@ -172,13 +172,13 @@ static IR_KEYTAB_TYPE avacssmart_codes[I [ 30 ] = KEY_POWER, // power [ 28 ] = KEY_SEARCH, // scan [ 7 ] = KEY_SELECT, // source - + [ 22 ] = KEY_VOLUMEUP, [ 20 ] = KEY_VOLUMEDOWN, [ 31 ] = KEY_CHANNELUP, [ 23 ] = KEY_CHANNELDOWN, [ 24 ] = KEY_MUTE, - + [ 2 ] = KEY_KP0, [ 1 ] = KEY_KP1, [ 11 ] = KEY_KP2,
@@ -190,21 +190,21 @@ static IR_KEYTAB_TYPE avacssmart_codes[I [ 10 ] = KEY_KP8, [ 18 ] = KEY_KP9, [ 16 ] = KEY_KPDOT, - + [ 3 ] = KEY_TUNER, // tv/fm [ 4 ] = KEY_REWIND, // fm tuning left or function left [ 12 ] = KEY_FORWARD, // fm tuning right or function right - + [ 0 ] = KEY_RECORD, [ 8 ] = KEY_STOP, [ 17 ] = KEY_PLAY, - + [ 25 ] = KEY_ZOOM, [ 14 ] = KEY_MENU, // function [ 19 ] = KEY_AGAIN, // recall [ 29 ] = KEY_RESTART, // reset - -// FIXME + +// FIXME [ 13 ] = KEY_F21, // mts [ 15 ] = KEY_F22, // min [ 26 ] = KEY_F23, // freeze
drivers/media/video/saa7134/saa7134-oss.c +0 -2
@@ -776,8 +776,6 @@ int saa7134_oss_init1(struct saa7134_dev dev->oss.rate =32000 ;if (oss_rate) dev->oss.rate = oss_rate; -if (saa7134_boards[dev->board].i2s_rate) - dev->oss.rate = saa7134_boards[dev->board].i2s_rate; dev->oss.rate = (dev->oss.rate >40000 ) ?48000 :32000 ;/* mixer */
drivers/media/video/saa7134/saa7134-ts.c +2 -2
@@ -411,7 +411,7 @@ static int ts_do_ioctl(struct inode *inocase MPEG_SETPARAMS :return ts_init_encoder (dev, arg); - +default :return -ENOIOCTLCMD ; }
@@ -481,7 +481,7 @@ int saa7134_ts_init1(struct saa7134_devsaa_writeb (SAA7134_TS_PARALLEL_SERIAL , (TS_PACKET_SIZE -1 ));saa_writeb (SAA7134_TS_DMA0 , ((ts_nr_packets-1 )&0xff ));saa_writeb (SAA7134_TS_DMA1 , (((ts_nr_packets-1 )>>8 )&0xff )); -saa_writeb (SAA7134_TS_DMA2 , ((((ts_nr_packets-1 )>>16 )&0x3f ) |0x00 ));/* TSNOPIT=0, TSCOLAP=0 */ +saa_writeb (SAA7134_TS_DMA2 , ((((ts_nr_packets-1 )>>16 )&0x3f ) |0x00 ));/* TSNOPIT=0, TSCOLAP=0 */ return 0 ; }
drivers/media/video/saa7134/saa7134-tvaudio.c +10 -8
@@ -166,7 +166,7 @@ static void tvaudio_init(struct saa7134_if (UNSET != audio_clock_override) clock = audio_clock_override; - +/* init all audio registers */ saa_writeb (SAA7134_AUDIO_PLL_CTRL ,0x00 );if (need_resched ())
@@ -361,13 +361,13 @@ static int tvaudio_checkcarrier(struct sif (tvaudio_sleep (dev,SCAN_SAMPLE_DELAY ))return -1 ; left =saa_readl (SAA7134_LEVEL_READOUT1 >>2 ); - +tvaudio_setcarrier (dev,scan->carr+90 ,scan->carr+90 );saa_readl (SAA7134_LEVEL_READOUT1 >>2 );if (tvaudio_sleep (dev,SCAN_SAMPLE_DELAY ))return -1 ; right =saa_readl (SAA7134_LEVEL_READOUT1 >>2 ); - + left >>=16 ; right >>=16 ; value = left > right ? left - right : right - left;
@@ -504,7 +504,8 @@ static int tvaudio_thread(void *data)dprintk ("tvaudio thread scan start [%d]\n" ,dev->thread.scan1); dev->tvaudio =NULL ;tvaudio_init (dev); - dev->automute =1 ; +if (dev->ctl_automute) + dev->automute =1 ;mute_input_7134 (dev);/* give the tuner some time */
@@ -758,11 +759,11 @@ static int tvaudio_thread_ddep(void *datif (UNSET != audio_clock_override) clock = audio_clock_override;saa_writel (0x598 >>2 , clock); - +/* unmute */ saa_dsp_writel (dev,0x474 >>2 ,0x00 );saa_dsp_writel (dev,0x450 >>2 ,0x00 ); - +for (;;) {tvaudio_sleep (dev,-1 );if (dev->thread.shutdown ||signal_pending (current))
@@ -924,8 +925,9 @@ int saa7134_tvaudio_init2(struct saa7134int (*my_thread)(void *data) =NULL ;/* enable I2S audio output */ -if (saa7134_boards[dev->board].i2s_rate) { -int i2sform = (32000 == saa7134_boards[dev->board].i2s_rate) ?0x00 :0x01 ; +if (saa7134_boards[dev->board].has_ts) { +int i2sform = (48000 == dev->oss.rate) + ?0x01 :0x00 ;/* enable I2S output */ saa_writeb (SAA7134_I2S_OUTPUT_SELECT ,0x80 );
drivers/media/video/saa7134/saa7134-video.c +45 -13
155 lines not on this page · raw message
drivers/media/video/saa7134/saa7134.h +8 -4
@@ -156,6 +156,9 @@ struct saa7134_format {#define SAA7134_BOARD_AVERMEDIA_305 35#define SAA7133_BOARD_UPMOST_PURPLE_TV 36#define SAA7134_BOARD_ITEMS_MTV005 37 +#define SAA7134_BOARD_CINERGY200 38 +#define SAA7134_BOARD_FLYTVPLATINUM 39 +#define SAA7134_BOARD_VIDEOMATE_TV_PVR 40#define SAA7134_INPUT_MAX 8
@@ -178,13 +181,12 @@ struct saa7134_board {struct saa7134_input mute;/* peripheral I/O */ -unsigned int i2s_rate;unsigned int has_ts;enum saa7134_video_out video_out;/* i2c chip info */ unsigned int tuner_type; - unsigned int need_tda9887:1; +unsigned int tda9887_conf; };#define card_has_radio (dev) (NULL != saa7134_boards[dev->board].radio.name)
@@ -362,6 +364,7 @@ struct saa7134_dev {/* config info */ unsigned int board;unsigned int tuner_type; +unsigned int tda9887_conf;unsigned int gpio_value;/* i2c i/o */
@@ -397,12 +400,13 @@ struct saa7134_dev {int ctl_mirror;int ctl_y_odd;int ctl_y_even; - +int ctl_automute; +/* crop */ struct v4l2_rect crop_bounds;struct v4l2_rect crop_defrect;struct v4l2_rect crop_current; - +/* other global state info */ unsigned int automute;struct saa7134_thread thread;
Signature · 1 line
return -ENOSIG;