saa7134 update
PATCH 1/1 saa7134 update
Major saa7134 driver update. Changes:
* add a bunch of new cards.
* add dvb card support (Pinnacle 300i only for now ...).
* update empress encoder card support,
use the new v4l2 mpeg API for the settings.
Signed-off-by Gerd Knorr <[email protected]>
--- drivers/media/video/Kconfig | 4 drivers/media/video/saa7134/Makefile | 1 drivers/media/video/saa7134/saa6752hs.c | 314 ++++++++++---- drivers/media/video/saa7134/saa7134-cards.c | 400 ++++++++++++++++-- drivers/media/video/saa7134/saa7134-core.c | 43 + drivers/media/video/saa7134/saa7134-dvb.c | 191 ++++++++ drivers/media/video/saa7134/saa7134-empress.c | 60 ++ drivers/media/video/saa7134/saa7134-i2c.c | 37 - drivers/media/video/saa7134/saa7134-input.c | 60 ++ drivers/media/video/saa7134/saa7134-oss.c | 6 drivers/media/video/saa7134/saa7134-ts.c | 7 drivers/media/video/saa7134/saa7134-tvaudio.c | 63 +- drivers/media/video/saa7134/saa7134-vbi.c | 3 drivers/media/video/saa7134/saa7134-video.c | 59 +- drivers/media/video/saa7134/saa7134.h | 21 include/media/saa6752hs.h | 29 + 16 files changed, 1061 insertions(+), 237 deletions(-)
drivers/media/video/saa7134/saa7134.h +17 -4
@@ -1,5 +1,5 @@/* -* $Id: saa7134.h,v 1.27 2004/11/04 11:03:52 kraxel Exp $ +* $Id: saa7134.h,v 1.38 2005/03/07 12:01:51 kraxel Exp $ * * v4l2 device driver for philips saa7134 based TV cards *
@@ -64,6 +64,7 @@ enum saa7134_audio_in {TV =1 ,LINE1 =2 ,LINE2 =3 , + LINE2_LEFT, }; enum saa7134_video_out {
@@ -156,11 +157,11 @@ struct saa7134_format {#define SAA7134_BOARD_AVACSSMARTTV 32#define SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER 33#define SAA7134_BOARD_NOVAC_PRIMETV7133 34 -#define SAA7134_BOARD_AVERMEDIA_305 35 +#define SAA7134_BOARD_AVERMEDIA_STUDIO_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_FLYTVPLATINUM_MINI 39#define SAA7134_BOARD_VIDEOMATE_TV_PVR 40#define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS 41#define SAA7134_BOARD_SABRENT_SBTTVFM 42
@@ -169,6 +170,14 @@ struct saa7134_format {#define SAA7134_BOARD_AVERMEDIA_307 45#define SAA7134_BOARD_AVERMEDIA_CARDBUS 46#define SAA7134_BOARD_CINERGY400_CARDBUS 47 +#define SAA7134_BOARD_CINERGY600_MK3 48 +#define SAA7134_BOARD_VIDEOMATE_GOLD_PLUS 49 +#define SAA7134_BOARD_PINNACLE_300I_DVBT_PAL 50 +#define SAA7134_BOARD_PROVIDEO_PV952 51 +#define SAA7134_BOARD_AVERMEDIA_305 52 +#define SAA7135_BOARD_ASUSTeK_TVFM7135 53 +#define SAA7134_BOARD_FLYTVPLATINUM_FM 54 +#define SAA7134_BOARD_FLYDVBTDUO 55#define SAA7134_MAXBOARDS 8#define SAA7134_INPUT_MAX 8
@@ -355,6 +364,7 @@ struct saa7134_mpeg_ops {struct list_head next;int (*init)(struct saa7134_dev *dev);int (*fini)(struct saa7134_dev *dev); +void (*signal_change)(struct saa7134_dev *dev); };/* global device status */
@@ -390,6 +400,7 @@ struct saa7134_dev {unsigned int tuner_type;unsigned int tda9887_conf;unsigned int gpio_value; +unsigned int irq2_mask;/* i2c i/o */ struct i2c_adapter i2c_adap;
@@ -437,6 +448,7 @@ struct saa7134_dev {struct saa7134_input *hw_input;unsigned int hw_mute;int last_carrier; +int nosignal;/* SAA7134_MPEG_* */ struct saa7134_ts ts;
@@ -447,6 +459,8 @@ struct saa7134_dev {struct video_device *empress_dev;struct videobuf_queue empress_tsq;unsigned int empress_users; +struct work_struct empress_workqueue; +int empress_started;/* SAA7134_MPEG_DVB only */ struct videobuf_dvb dvb;
@@ -476,7 +490,6 @@ struct saa7134_dev {/* saa7134-core.c */ extern struct list_head saa7134_devlist; -extern unsigned int saa7134_devcount;void saa7134_print_ioctl (char *name,unsigned int cmd);void saa7134_track_gpio (struct saa7134_dev *dev,char *msg);
drivers/media/video/saa7134/saa7134-core.c +25 -18
102 lines not on this page · raw message
drivers/media/video/saa7134/saa7134-cards.c +362 -38
615 lines not on this page · raw message
drivers/media/video/saa7134/saa7134-tvaudio.c +39 -24
126 lines not on this page · raw message
drivers/media/video/saa7134/saa7134-video.c +44 -15
122 lines not on this page · raw message
drivers/media/video/saa7134/saa7134-input.c +59 -1
94 lines not on this page · raw message
drivers/media/video/saa7134/saa7134-empress.c +51 -9
146 lines not on this page · raw message
include/media/saa6752hs.h +23 -6
@@ -18,14 +18,14 @@Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifndef _SAA6752HS_H +#if 0 /* ndef _SAA6752HS_H */ #define _SAA6752HS_H -enum mpeg_bitrate_mode { -MPEG_BITRATE_MODE_VBR =0 ,/* Variable bitrate */ -MPEG_BITRATE_MODE_CBR =1 ,/* Constant bitrate */ +enum mpeg_video_bitrate_mode { +MPEG_VIDEO_BITRATE_MODE_VBR =0 ,/* Variable bitrate */ +MPEG_VIDEO_BITRATE_MODE_CBR =1 ,/* Constant bitrate */ -MPEG_BITRATE_MODE_MAX +MPEG_VIDEO_BITRATE_MODE_MAX }; enum mpeg_audio_bitrate {
@@ -35,16 +35,33 @@ enum mpeg_audio_bitrate { MPEG_AUDIO_BITRATE_MAX }; +enum mpeg_video_format { +MPEG_VIDEO_FORMAT_D1 =0 , +MPEG_VIDEO_FORMAT_2_3_D1 =1 , +MPEG_VIDEO_FORMAT_1_2_D1 =2 , +MPEG_VIDEO_FORMAT_SIF =3 , + +MPEG_VIDEO_FORMAT_MAX +}; +#define MPEG_VIDEO_TARGET_BITRATE_MAX 27000#define MPEG_VIDEO_MAX_BITRATE_MAX 27000#define MPEG_TOTAL_BITRATE_MAX 27000 +#define MPEG_PID_MAX ((1 << 14) - 1)struct mpeg_params { -enum mpeg_bitrate_mode bitrate_mode; +enum mpeg_video_bitrate_mode video_bitrate_mode;unsigned int video_target_bitrate;unsigned int video_max_bitrate;// only used for VBR enum mpeg_audio_bitrate audio_bitrate;unsigned int total_bitrate; + +unsigned int pmt_pid; +unsigned int video_pid; +unsigned int audio_pid; +unsigned int pcr_pid; + +enum mpeg_video_format video_format; };#define MPEG_SETPARAMS _IOW('6',100,struct mpeg_params)
drivers/media/video/saa7134/saa6752hs.c +225 -89
471 lines not on this page · raw message
drivers/media/video/saa7134/saa7134-oss.c +5 -1
@@ -1,5 +1,5 @@/* -* $Id: saa7134-oss.c,v 1.11 2004/11/07 13:17:15 kraxel Exp $ +* $Id: saa7134-oss.c,v 1.13 2004/12/10 12:33:39 kraxel Exp $ * * device driver for philips saa7134 based TV cards * oss dsp interface
@@ -24,6 +24,7 @@#include <linux/init.h> #include <linux/list.h> #include <linux/module.h> +#include <linux/moduleparam.h> #include <linux/kernel.h> #include <linux/slab.h> #include <linux/soundcard.h>
@@ -543,6 +544,7 @@ mixer_recsrc_7134(struct saa7134_dev *debreak ;case LINE1 :case LINE2 : +case LINE2_LEFT : analog_io = (LINE1 == dev->oss.input) ?0x00 :0x08 ; rate = (32000 == dev->oss.rate) ?0x01 :0x03 ;saa_andorb (SAA7134_ANALOG_IO_SELECT ,0x08 , analog_io);
@@ -566,6 +568,7 @@ mixer_recsrc_7133(struct saa7134_dev *de value =0xbbbb32 ;/* AUX1 */ break ;case LINE2 : +case LINE2_LEFT : value =0xbbbb54 ;/* AUX2 */ break ; }
@@ -608,6 +611,7 @@ mixer_level(struct saa7134_dev *dev, enu (100 == level) ? 0x00 : 0x10);break ;case LINE2 : +case LINE2_LEFT :saa_andorb (SAA7134_ANALOG_IO_SELECT ,0x20 , (100 == level) ?0x00 :0x20 );break ;
drivers/media/video/saa7134/saa7134-dvb.c +183 -8
229 lines not on this page · raw message
drivers/media/video/saa7134/saa7134-i2c.c +18 -19
@@ -1,5 +1,5 @@/* -* $Id: saa7134-i2c.c,v 1.7 2004/11/07 13:17:15 kraxel Exp $ +* $Id: saa7134-i2c.c,v 1.10 2005/01/24 17:37:23 kraxel Exp $ * * device driver for philips saa7134 based TV cards * i2c interface support
@@ -24,6 +24,7 @@#include <linux/init.h> #include <linux/list.h> #include <linux/module.h> +#include <linux/moduleparam.h> #include <linux/kernel.h> #include <linux/slab.h> #include <linux/delay.h>
@@ -205,7 +206,8 @@ static inline int i2c_send_byte(struct s dword &=0x0f ; dword |= (attr <<6 ); dword |= ((__u32 )data <<8 ); - dword |=0x00 <<16 ; + dword |=0x00 <<16 ;/* 100 kHz */ +// dword |= 0x40 << 16; /* 400 kHz */ dword |=0xf0 <<24 ;saa_writel (SAA7134_I2C_ATTR_STATUS >>2 , dword);#endif
@@ -248,13 +250,24 @@ static int saa7134_i2c_xfer(struct i2c_aif (!i2c_reset (dev))return -EIO ; +d2printk ("start xfer\n" );d1printk (KERN_DEBUG "%s: i2c xfer:" ,dev->name);for (i =0 ; i < num; i++) {if (!(msgs[i].flags &I2C_M_NOSTART ) ||0 == i) {/* send address */ +d2printk ("send address\n" ); addr = msgs[i].addr <<1 ;if (msgs[i].flags &I2C_M_RD ) addr |=1 ; +if (i >0 && msgs[i].flags &I2C_M_RD ) { +/* workaround for a saa7134 i2c bug +* needed to talk to the mt352 demux +* thanks to pinnacle for the hint */ +int quirk =0xfd ; +d1printk (" [%02x quirk]" ,quirk); +i2c_send_byte (dev,START ,quirk); +i2c_recv_byte (dev); + }d1printk (" < %02x" , addr); rc =i2c_send_byte (dev,START ,addr);if (rc <0 )
@@ -262,6 +275,7 @@ static int saa7134_i2c_xfer(struct i2c_a }if (msgs[i].flags &I2C_M_RD ) {/* read bytes */ +d2printk ("read bytes\n" );for (byte =0 ; byte < msgs[i].len; byte++) {d1printk (" =" ); rc =i2c_recv_byte (dev);
@@ -272,6 +286,7 @@ static int saa7134_i2c_xfer(struct i2c_a } }else {/* write bytes */ +d2printk ("write bytes\n" );for (byte =0 ; byte < msgs[i].len; byte++) { data = msgs[i].buf[byte];d1printk (" %02x" , data);
@@ -281,6 +296,7 @@ static int saa7134_i2c_xfer(struct i2c_a } } } +d2printk ("xfer done\n" );d1printk (" >" );i2c_set_attr (dev,STOP ); rc = -EIO ;
@@ -313,18 +329,6 @@ static u32 functionality(struct i2c_adapreturn I2C_FUNC_SMBUS_EMUL ; } -#ifndef I2C_PEC -static void inc_use (struct i2c_adapter *adap) -{ -MOD_INC_USE_COUNT ; -} - -static void dec_use (struct i2c_adapter *adap) -{ -MOD_DEC_USE_COUNT ; -} -#endif -static int attach_inform (struct i2c_client *client) {struct saa7134_dev *dev = client->adapter->algo_data;
@@ -345,12 +349,7 @@ static struct i2c_algorithm saa7134_algo };static struct i2c_adapter saa7134_adap_template = { -#ifdef I2C_PEC .owner =THIS_MODULE , -#else - .inc_use = inc_use, - .dec_use = dec_use, -#endif #ifdef I2C_CLASS_TV_ANALOG .class =I2C_CLASS_TV_ANALOG , #endif
drivers/media/video/saa7134/saa7134-ts.c +4 -3
@@ -1,5 +1,5 @@/* -* $Id: saa7134-ts.c,v 1.12 2004/11/07 13:17:15 kraxel Exp $ +* $Id: saa7134-ts.c,v 1.14 2005/02/03 10:24:33 kraxel Exp $ * * device driver for philips saa7134 based TV cards * video4linux video interface
@@ -24,6 +24,7 @@#include <linux/init.h> #include <linux/list.h> #include <linux/module.h> +#include <linux/moduleparam.h> #include <linux/kernel.h> #include <linux/slab.h> #include <linux/delay.h>
@@ -220,10 +221,10 @@ void saa7134_irq_ts_done(struct saa7134_if (dev->ts_q.curr) { field = dev->ts_q.curr->vb.field;if (field ==V4L2_FIELD_TOP ) { -if ((status &0x100000 ) !=0x100000 ) +if ((status &0x100000 ) !=0x000000 ) goto done; }else { -if ((status &0x100000 ) !=0x000000 ) +if ((status &0x100000 ) !=0x100000 ) goto done; }saa7134_buffer_finish (dev,&dev->ts_q,STATE_DONE );
drivers/media/video/saa7134/saa7134-vbi.c +2 -1
@@ -1,5 +1,5 @@/* -* $Id: saa7134-vbi.c,v 1.5 2004/11/07 13:17:15 kraxel Exp $ +* $Id: saa7134-vbi.c,v 1.6 2004/12/10 12:33:39 kraxel Exp $ * * device driver for philips saa7134 based TV cards * video4linux video interface
@@ -24,6 +24,7 @@#include <linux/init.h> #include <linux/list.h> #include <linux/module.h> +#include <linux/moduleparam.h> #include <linux/kernel.h> #include <linux/slab.h>
drivers/media/video/Kconfig +3 -1
@@ -249,7 +249,9 @@ config VIDEO_SAA7134 config VIDEO_SAA7134_DVB tristate "DVB Support for saa7134 based TV cards" - depends on VIDEO_SAA7134 && DVB_CORE && BROKEN + depends on VIDEO_SAA7134 && DVB_CORE + select VIDEO_BUF_DVB + select DVB_MT352 ---help--- This adds support for DVB cards based on the Philips saa7134 chip.
drivers/media/video/saa7134/Makefile +1 -0
@@ -8,3 +8,4 @@ obj-$(CONFIG_VIDEO_SAA7134_DVB) += saa71 EXTRA_CFLAGS += -I$(src)/.. EXTRA_CFLAGS += -I$(srctree)/drivers/media/dvb/dvb-core +EXTRA_CFLAGS += -I$(srctree)/drivers/media/dvb/frontends
Signature · 1 line
#define printk(args...) fprintf(stderr, ## args)