bttv: convert to generic TEA575x interface
Subsystems (3)
cover bttv: convert to generic TEA575x interface
Hello,
this patch series removes the tea575x code from bttv and uses the common tea575x driver instead. Only set_frequency is implemented (signal/stereo detection or seek would require more changes to bttv).
It works fine on Video Highway Xtreme but I don't have the Miro/Pinnacle or Terratec Active Radio Upgrade to test.
Miro/Pinnacle seems to be simple and should work.
However, I don't understand the Terratec Active Radio Upgrade code. The HW seems to need IOR, IOW and CSEL signals that were taken from ISA bus on older cards (IOR and IOW directly and CSEL from some address decoder) and are emulated here using GPIOs. But the code manipulating these signals in bttv seems to be broken - it never asserts the IOR signal. If anyone has this HW, please test if I got that right.
Signature · 1 line
Ondrej Zary
PATCH 1/3 tea575x-tuner: move HW init to a separate function
Move HW initialization to separate function to allow using the code without the v4l parts. This is needed for use in the bttv driver.
--- include/sound/tea575x-tuner.h | 1 + sound/i2c/other/tea575x-tuner.c | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-)
include/sound/tea575x-tuner.h +1 -0
@@ -71,6 +71,7 @@ struct snd_tea575x {int (*ext_init)(struct snd_tea575x *tea); }; +int snd_tea575x_hw_init (struct snd_tea575x *tea);int snd_tea575x_init (struct snd_tea575x *tea,struct module *owner);void snd_tea575x_exit (struct snd_tea575x *tea);void snd_tea575x_set_freq (struct snd_tea575x *tea);
sound/i2c/other/tea575x-tuner.c +13 -6
@@ -486,13 +486,9 @@ static const struct v4l2_ctrl_ops tea575x_ctrl_ops = { .s_ctrl = tea575x_s_ctrl, }; -/* -* initialize all the tea575x chips -*/ -int snd_tea575x_init (struct snd_tea575x *tea,struct module *owner) -{ -int retval; +int snd_tea575x_hw_init (struct snd_tea575x *tea) +{ tea->mute = true;/* Not all devices can or know how to read the data back.
@@ -507,6 +503,17 @@ int snd_tea575x_init(struct snd_tea575x *tea, struct module *owner) tea->freq =90500 *16 ;/* 90.5Mhz default */ snd_tea575x_set_freq (tea); +return 0 ; +} +EXPORT_SYMBOL (snd_tea575x_hw_init); + +int snd_tea575x_init (struct snd_tea575x *tea,struct module *owner) +{ +int retval =snd_tea575x_hw_init (tea); + +if (retval) +return retval; + tea->vd = tea575x_radio;video_set_drvdata (&tea->vd, tea);mutex_init (&tea->mutex);
Signature · 1 line
Ondrej Zary
PATCH 2/3 bttv: stop abusing mbox_we for sw_status
In reply to Ondrej ZaryKodicom 4400R and Geovision GV-800 code in bttv driver abuses mbox_we (int) in struct bttv as char *.
Remove this hack and add a proper sw_status array to struct bttv instead. This is a a preparation to remove mbox_we.
--- drivers/media/pci/bt8xx/bttv-cards.c | 26 +++++++++----------------- drivers/media/pci/bt8xx/bttvp.h | 3 +++ 2 files changed, 12 insertions(+), 17 deletions(-)
drivers/media/pci/bt8xx/bttv-cards.c +9 -17
@@ -4401,9 +4401,7 @@ static void tibetCS16_init(struct bttv *btv)* is {3, 0, 2, 1}, i.e. the first controller to be detected is logical * unit 3, the second (which is the master) is logical unit 0, etc. * We need to maintain the status of the analog switch (which of the 16 -* cameras is connected to which of the 4 controllers). Rather than -* add to the bttv structure for this, we use the data reserved for -* the mbox (unused for this card type). +* cameras is connected to which of the 4 controllers) in sw_status array. */ /*
@@ -4438,7 +4436,6 @@ static void kodicom4400r_write(struct bttv *btv,*/ static void kodicom4400r_muxsel (struct bttv *btv,unsigned int input) { -char *sw_status;int xaddr, yaddr;struct bttv *mctlr;static unsigned char map[4 ] = {3 ,0 ,2 ,1 };
@@ -4449,14 +4446,13 @@ static void kodicom4400r_muxsel(struct bttv *btv, unsigned int input) } yaddr = (btv->c.nr - mctlr->c.nr +1 ) &3 ;/* the '&' is for safety */ yaddr = map[yaddr]; - sw_status = (char *)(&mctlr->mbox_we); xaddr = input &0xf ;/* Check if the controller/camera pair has changed, else ignore */ -if (sw_status[yaddr] != xaddr) +if (mctlr->sw_status[yaddr] != xaddr) {/* "open" the old switch, "close" the new one, save the new */ -kodicom4400r_write (mctlr, sw_status[yaddr], yaddr,0 ); - sw_status[yaddr] = xaddr; +kodicom4400r_write (mctlr, mctlr->sw_status[yaddr], yaddr,0 ); + mctlr->sw_status[yaddr] = xaddr;kodicom4400r_write (mctlr, xaddr, yaddr,1 ); } }
@@ -4469,7 +4465,6 @@ static void kodicom4400r_muxsel(struct bttv *btv, unsigned int input)*/ static void kodicom4400r_init (struct bttv *btv) { -char *sw_status = (char *)(&btv->mbox_we);int ix;gpio_inout (0x0003ff ,0x0003ff );
@@ -4477,7 +4472,7 @@ static void kodicom4400r_init(struct bttv *btv)gpio_write (0 );/* Preset camera 0 to the 4 controllers */ for (ix =0 ; ix <4 ; ix++) { - sw_status[ix] = ix; + btv->sw_status[ix] = ix;kodicom4400r_write (btv, ix, ix,1 ); }/*
@@ -4754,7 +4749,6 @@ static void gv800s_write(struct bttv *btv,static void gv800s_muxsel (struct bttv *btv,unsigned int input) {struct bttv *mctlr; -char *sw_status;int xaddr, yaddr;static unsigned int map[4 ][4 ] = { {0x0 ,0x4 ,0xa ,0x6 }, {0x1 ,0x5 ,0xb ,0x7 },
@@ -4767,14 +4761,13 @@ static void gv800s_muxsel(struct bttv *btv, unsigned int input)return ; } yaddr = (btv->c.nr - mctlr->c.nr) &3 ; - sw_status = (char *)(&mctlr->mbox_we); xaddr = map[yaddr][input] &0xf ;/* Check if the controller/camera pair has changed, ignore otherwise */ -if (sw_status[yaddr] != xaddr) { +if (mctlr->sw_status[yaddr] != xaddr) {/* disable the old switch, enable the new one and save status */ -gv800s_write (mctlr, sw_status[yaddr], yaddr,0 ); - sw_status[yaddr] = xaddr; +gv800s_write (mctlr, mctlr->sw_status[yaddr], yaddr,0 ); + mctlr->sw_status[yaddr] = xaddr;gv800s_write (mctlr, xaddr, yaddr,1 ); } }
@@ -4782,7 +4775,6 @@ static void gv800s_muxsel(struct bttv *btv, unsigned int input)/* GeoVision GV-800(S) "master" chip init */ static void gv800s_init (struct bttv *btv) { -char *sw_status = (char *)(&btv->mbox_we);int ix;gpio_inout (0xf107f ,0xf107f );
@@ -4791,7 +4783,7 @@ static void gv800s_init(struct bttv *btv)/* Preset camera 0 to the 4 controllers */ for (ix =0 ; ix <4 ; ix++) { - sw_status[ix] = ix; + btv->sw_status[ix] = ix;gv800s_write (btv, ix, ix,1 ); }
drivers/media/pci/bt8xx/bttvp.h +3 -0
@@ -459,6 +459,9 @@ struct bttv {int mbox_iow;int mbox_csel; +/* switch status for multi-controller cards */ +char sw_status[4 ]; +/* risc memory management data - must acquire s_lock before changing these - only the irq handler is supported to touch top + bottom + vcurr */
Signature · 1 line
Ondrej Zary
PATCH 3/3 bttv: Convert to generic TEA575x interface
In reply to Ondrej ZaryRemove tea575x-specific code from bttv and use the common driver instead.
--- drivers/media/pci/bt8xx/bttv-cards.c | 317 ++++++++++++--------------------- drivers/media/pci/bt8xx/bttv-driver.c | 6 +- drivers/media/pci/bt8xx/bttvp.h | 14 +- sound/pci/Kconfig | 4 +- 4 files changed, 124 insertions(+), 217 deletions(-)
drivers/media/pci/bt8xx/bttv-cards.c +110 -207
@@ -83,8 +83,7 @@ static void gv800s_init(struct bttv *btv);static void td3116_muxsel (struct bttv *btv,unsigned int input);static int terratec_active_radio_upgrade (struct bttv *btv); -static int tea5757_read (struct bttv *btv); -static int tea5757_write (struct bttv *btv,int value); +static int tea575x_init (struct bttv *btv);static void identify_by_eeprom (struct bttv *btv,unsigned char eeprom_data[256 ]);static int pvr_boot (struct bttv *btv);
@@ -3023,12 +3022,12 @@ static void miro_pinnacle_gpio(struct bttv *btv)if (0 == (gpio &0x20 )) { btv->has_radio =1 ;if (!miro_fmtuner[id]) { - btv->has_matchbox =1 ; - btv->mbox_we = (1 <<6 ); - btv->mbox_most = (1 <<7 ); - btv->mbox_clk = (1 <<8 ); - btv->mbox_data = (1 <<9 ); - btv->mbox_mask = (1 <<6 )|(1 <<7 )|(1 <<8 )|(1 <<9 ); + btv->has_tea575x =1 ; + btv->tea_gpio.wren =6 ; + btv->tea_gpio.most =7 ; + btv->tea_gpio.clk =8 ; + btv->tea_gpio.data =9 ; +tea575x_init (btv); } }else { btv->has_radio =0 ;
@@ -3042,7 +3041,7 @@ static void miro_pinnacle_gpio(struct bttv *btv)pr_info ("%d: miro: id=%d tuner=%d radio=%s stereo=%s\n" , btv->c.nr, id+1 , btv->tuner_type, !btv->has_radio ?"no" : - (btv->has_matchbox ?"matchbox" :"fmtuner" ), + (btv->has_tea575x ?"tea575x" :"fmtuner" ), (-1 == msp) ?"no" :"yes" ); }else {/* new cards with microtune tuner */
@@ -3317,12 +3316,12 @@ void bttv_init_card2(struct bttv *btv)break ;case BTTV_BOARD_VHX : btv->has_radio =1 ; - btv->has_matchbox =1 ; - btv->mbox_we =0x20 ; - btv->mbox_most =0 ; - btv->mbox_clk =0x08 ; - btv->mbox_data =0x10 ; - btv->mbox_mask =0x38 ; + btv->has_tea575x =1 ; + btv->tea_gpio.wren =5 ; + btv->tea_gpio.most =6 ; + btv->tea_gpio.clk =3 ; + btv->tea_gpio.data =4 ; +tea575x_init (btv);break ;case BTTV_BOARD_VOBIS_BOOSTAR :case BTTV_BOARD_TERRATV :
@@ -3670,33 +3669,112 @@ static void hauppauge_eeprom(struct bttv *btv) btv->radio_uses_msp_demodulator =1 ; } -static int terratec_active_radio_upgrade (struct bttv *btv) +/* ----------------------------------------------------------------------- */ + +static void bttv_tea575x_set_pins (struct snd_tea575x *tea,u8 pins) +{ +struct bttv *btv = tea->private_data; +struct bttv_tea575x_gpio gpio = btv->tea_gpio; +u16 val =0 ; + + val |= (pins &TEA575X_DATA ) ? (1 << gpio.data) :0 ; + val |= (pins &TEA575X_CLK ) ? (1 << gpio.clk) :0 ; + val |= (pins &TEA575X_WREN ) ? (1 << gpio.wren) :0 ; + +gpio_bits ((1 << gpio.data) | (1 << gpio.clk) | (1 << gpio.wren), val); +if (btv->mbox_ior) { +/* IOW and CSEL active */ +gpio_bits (btv->mbox_iow | btv->mbox_csel,0 ); +udelay (5 ); +/* all inactive */ +gpio_bits (btv->mbox_ior | btv->mbox_iow | btv->mbox_csel, + btv->mbox_ior | btv->mbox_iow | btv->mbox_csel); + } +} + +static u8 bttv_tea575x_get_pins (struct snd_tea575x *tea) { -int freq; +struct bttv *btv = tea->private_data; +struct bttv_tea575x_gpio gpio = btv->tea_gpio; +u8 ret =0 ; +u16 val; + +if (btv->mbox_ior) { +/* IOR and CSEL active */ +gpio_bits (btv->mbox_ior | btv->mbox_csel,0 ); +udelay (5 ); + } + val =gpio_read (); +if (btv->mbox_ior) { +/* all inactive */ +gpio_bits (btv->mbox_ior | btv->mbox_iow | btv->mbox_csel, + btv->mbox_ior | btv->mbox_iow | btv->mbox_csel); + } + +if (val & (1 << gpio.data)) + ret |=TEA575X_DATA ; +if (val & (1 << gpio.most)) + ret |=TEA575X_MOST ; + +return ret; +} + +static void bttv_tea575x_set_direction (struct snd_tea575x *tea,bool output) +{ +struct bttv *btv = tea->private_data; +struct bttv_tea575x_gpio gpio = btv->tea_gpio; +u32 mask = (1 << gpio.clk) | (1 << gpio.wren) | (1 << gpio.data) | + (1 << gpio.most); + +if (output) +gpio_inout (mask, (1 << gpio.data) | (1 << gpio.clk) | + (1 << gpio.wren)); +else +gpio_inout (mask, (1 << gpio.clk) | (1 << gpio.wren)); +} + +static struct snd_tea575x_ops bttv_tea_ops = { + .set_pins = bttv_tea575x_set_pins, + .get_pins = bttv_tea575x_get_pins, + .set_direction = bttv_tea575x_set_direction, +}; + +static int tea575x_init (struct bttv *btv) +{ + btv->tea.private_data = btv; + btv->tea.ops = &bttv_tea_ops; +if (!snd_tea575x_hw_init (&btv->tea)) { +pr_info ("%d: detected TEA575x radio\n" , btv->c.nr); + btv->tea.mute = false; +return 0 ; + } + btv->has_tea575x =0 ; + btv->has_radio =0 ; + +return -ENODEV ; +} + +/* ----------------------------------------------------------------------- */ + +static int terratec_active_radio_upgrade (struct bttv *btv) +{ btv->has_radio =1 ; - btv->has_matchbox =1 ; - btv->mbox_we =0x10 ; - btv->mbox_most =0x20 ; - btv->mbox_clk =0x08 ; - btv->mbox_data =0x04 ; - btv->mbox_mask =0x3c ; + btv->has_tea575x =1 ; + btv->tea_gpio.wren =4 ; + btv->tea_gpio.most =5 ; + btv->tea_gpio.clk =3 ; + btv->tea_gpio.data =2 ; btv->mbox_iow =1 <<8 ; btv->mbox_ior =1 <<9 ; btv->mbox_csel =1 <<10 ; - freq=88000 /62.5 ; -tea5757_write (btv,5 * freq +0x358 );/* write 0x1ed8 */ -if (0x1ed8 ==tea5757_read (btv)) { +if (!tea575x_init (btv)) {pr_info ("%d: Terratec Active Radio Upgrade found\n" , btv->c.nr); - btv->has_radio =1 ; - btv->has_saa6588 =1 ; - btv->has_matchbox =1 ; - }else { - btv->has_radio =0 ; - btv->has_matchbox =0 ; + btv->has_saa6588 =1 ; } +return 0 ; }
@@ -4127,181 +4205,6 @@ init_RTV24 (struct bttv *btv)pr_info ("%d: Adlink RTV-24 initialisation complete\n" , btv->c.nr); } - - -/* ----------------------------------------------------------------------- */ -/* Miro Pro radio stuff -- the tea5757 is connected to some GPIO ports */ -/* -* Copyright (c) 1999 Csaba Halasz <[email protected]> -* This code is placed under the terms of the GNU General Public License -* -* Brutally hacked by Dan Sheridan <[email protected]> djs52 8/3/00 -*/ - -static void bus_low (struct bttv *btv,int bit) -{ -if (btv->mbox_ior) { -gpio_bits (btv->mbox_ior | btv->mbox_iow | btv->mbox_csel, - btv->mbox_ior | btv->mbox_iow | btv->mbox_csel); -udelay (5 ); - } - -gpio_bits (bit,0 ); -udelay (5 ); - -if (btv->mbox_ior) { -gpio_bits (btv->mbox_iow | btv->mbox_csel,0 ); -udelay (5 ); - } -} - -static void bus_high (struct bttv *btv,int bit) -{ -if (btv->mbox_ior) { -gpio_bits (btv->mbox_ior | btv->mbox_iow | btv->mbox_csel, - btv->mbox_ior | btv->mbox_iow | btv->mbox_csel); -udelay (5 ); - } - -gpio_bits (bit,bit); -udelay (5 ); - -if (btv->mbox_ior) { -gpio_bits (btv->mbox_iow | btv->mbox_csel,0 ); -udelay (5 ); - } -} - -static int bus_in (struct bttv *btv,int bit) -{ -if (btv->mbox_ior) { -gpio_bits (btv->mbox_ior | btv->mbox_iow | btv->mbox_csel, - btv->mbox_ior | btv->mbox_iow | btv->mbox_csel); -udelay (5 ); - -gpio_bits (btv->mbox_iow | btv->mbox_csel,0 ); -udelay (5 ); - } -return gpio_read () & (bit); -} - -/* TEA5757 register bits */ -#define TEA_FREQ 0:14 -#define TEA_BUFFER 15:15 - -#define TEA_SIGNAL_STRENGTH 16:17 - -#define TEA_PORT1 18:18 -#define TEA_PORT0 19:19 - -#define TEA_BAND 20:21 -#define TEA_BAND_FM 0 -#define TEA_BAND_MW 1 -#define TEA_BAND_LW 2 -#define TEA_BAND_SW 3 - -#define TEA_MONO 22:22 -#define TEA_ALLOW_STEREO 0 -#define TEA_FORCE_MONO 1 - -#define TEA_SEARCH_DIRECTION 23:23 -#define TEA_SEARCH_DOWN 0 -#define TEA_SEARCH_UP 1 - -#define TEA_STATUS 24:24 -#define TEA_STATUS_TUNED 0 -#define TEA_STATUS_SEARCHING 1 - -/* Low-level stuff */ -static int tea5757_read (struct bttv *btv) -{ -unsigned long timeout; -int value =0 ; -int i; - -/* better safe than sorry */ -gpio_inout (btv->mbox_mask, btv->mbox_clk | btv->mbox_we); - -if (btv->mbox_ior) { -gpio_bits (btv->mbox_ior | btv->mbox_iow | btv->mbox_csel, - btv->mbox_ior | btv->mbox_iow | btv->mbox_csel); -udelay (5 ); - } - -if (bttv_gpio) -bttv_gpio_tracking (btv,"tea5757 read" ); - -bus_low (btv,btv->mbox_we); -bus_low (btv,btv->mbox_clk); - -udelay (10 ); - timeout= jiffies +msecs_to_jiffies (1000 ); - -/* wait for DATA line to go low; error if it doesn't */ -while (bus_in (btv,btv->mbox_data) &&time_before (jiffies, timeout)) -schedule (); -if (bus_in (btv,btv->mbox_data)) { -pr_warn ("%d: tea5757: read timeout\n" , btv->c.nr); -return -1 ; - } - -dprintk ("%d: tea5757:" , btv->c.nr); -for (i =0 ; i <24 ; i++) { -udelay (5 ); -bus_high (btv,btv->mbox_clk); -udelay (5 ); -dprintk_cont ("%c" , -bus_in (btv, btv->mbox_most) ==0 ?'T' :'-' ); -bus_low (btv,btv->mbox_clk); - value <<=1 ; - value |= (bus_in (btv,btv->mbox_data) ==0 )?0 :1 ;/* MSB first */ -dprintk_cont ("%c" , -bus_in (btv, btv->mbox_most) ==0 ?'S' :'M' ); - } -dprintk_cont ("\n" ); -dprintk ("%d: tea5757: read 0x%X\n" , btv->c.nr, value); -return value; -} - -static int tea5757_write (struct bttv *btv,int value) -{ -int i; -int reg = value; - -gpio_inout (btv->mbox_mask, btv->mbox_clk | btv->mbox_we | btv->mbox_data); - -if (btv->mbox_ior) { -gpio_bits (btv->mbox_ior | btv->mbox_iow | btv->mbox_csel, - btv->mbox_ior | btv->mbox_iow | btv->mbox_csel); -udelay (5 ); - } -if (bttv_gpio) -bttv_gpio_tracking (btv,"tea5757 write" ); - -dprintk ("%d: tea5757: write 0x%X\n" , btv->c.nr, value); -bus_low (btv,btv->mbox_clk); -bus_high (btv,btv->mbox_we); -for (i =0 ; i <25 ; i++) { -if (reg &0x1000000 ) -bus_high (btv,btv->mbox_data); -else -bus_low (btv,btv->mbox_data); - reg <<=1 ; -bus_high (btv,btv->mbox_clk); -udelay (10 ); -bus_low (btv,btv->mbox_clk); -udelay (10 ); - } -bus_low (btv,btv->mbox_we);/* unmute !!! */ -return 0 ; -} - -void tea5757_set_freq (struct bttv *btv,unsigned short freq) -{ -dprintk ("tea5757_set_freq %d\n" ,freq); -tea5757_write (btv,5 * freq +0x358 );/* add 10.7MHz (see docs) */ -} -/* RemoteVision MX (rv605) muxsel helper [Miguel Freitas] * * This is needed because rv605 don't use a normal multiplex, but a crosspoint
drivers/media/pci/bt8xx/bttv-driver.c +4 -2
@@ -1876,8 +1876,10 @@ static void bttv_set_frequency(struct bttv *btv, const struct v4l2_frequency *f)if (new_freq.type ==V4L2_TUNER_RADIO ) {radio_enable (btv); btv->radio_freq = new_freq.frequency; -if (btv->has_matchbox) -tea5757_set_freq (btv, btv->radio_freq); +if (btv->has_tea575x) { + btv->tea.freq = btv->radio_freq; +snd_tea575x_set_freq (&btv->tea); + } }else { btv->tv_freq = new_freq.frequency; }
drivers/media/pci/bt8xx/bttvp.h +8 -6
@@ -42,6 +42,7 @@#include <media/tveeprom.h> #include <media/rc-core.h> #include <media/ir-kbd-i2c.h> +#include <sound/tea575x-tuner.h> #include "bt848.h" #include "bttv.h"
@@ -361,6 +362,10 @@ struct bttv_suspend_state {struct bttv_buffer *vbi; }; +struct bttv_tea575x_gpio { +u8 data, clk, wren, most; +}; +struct bttv {struct bttv_core c;
@@ -447,12 +452,9 @@ struct bttv {/* miro/pinnacle + Aimslab VHX philips matchbox (tea5757 radio tuner) support */ -int has_matchbox; -int mbox_we; -int mbox_data; -int mbox_clk; -int mbox_most; -int mbox_mask; +int has_tea575x; +struct bttv_tea575x_gpio tea_gpio; +struct snd_tea575x tea;/* ISA stuff (Terratec Active Radio Upgrade) */ int mbox_ior;
sound/pci/Kconfig +2 -2
@@ -2,8 +2,8 @@ config SND_TEA575X tristate - depends on SND_FM801_TEA575X_BOOL || SND_ES1968_RADIO || RADIO_SF16FMR2 || RADIO_MAXIRADIO || RADIO_SHARK - default SND_FM801 || SND_ES1968 || RADIO_SF16FMR2 || RADIO_MAXIRADIO || RADIO_SHARK + depends on SND_FM801_TEA575X_BOOL || SND_ES1968_RADIO || RADIO_SF16FMR2 || RADIO_MAXIRADIO || RADIO_SHARK || VIDEO_BT848 + default SND_FM801 || SND_ES1968 || RADIO_SF16FMR2 || RADIO_MAXIRADIO || RADIO_SHARK || VIDEO_BT848 menuconfig SND_PCI bool "PCI sound devices"
Signature · 1 line
Ondrej Zary
Re: [PATCH 3/3] bttv: Convert to generic TEA575x interface
Quoted 10 lines · On Tue May 14 2013 22:54:45 Ondrej Zary wrote:
Remove tea575x-specific code from bttv and use the common driver instead.
Signed-off-by Ondrej Zary <[email protected]>--- drivers/media/pci/bt8xx/bttv-cards.c | 317 ++++++++++++--------------------- drivers/media/pci/bt8xx/bttv-driver.c | 6 +- drivers/media/pci/bt8xx/bttvp.h | 14 +- sound/pci/Kconfig | 4 +- 4 files changed, 124 insertions(+), 217 deletions(-)
...
Quoted 6 lines
sound/pci/Kconfig +0
-0
sound/pci/Kconfig line 9
Quoted 10 lines
sound/pci/Kconfig +2
-2@@ -2,8 +2,8 @@ config SND_TEA575X tristate - depends on SND_FM801_TEA575X_BOOL || SND_ES1968_RADIO || RADIO_SF16FMR2 || RADIO_MAXIRADIO || RADIO_SHARK - default SND_FM801 || SND_ES1968 || RADIO_SF16FMR2 || RADIO_MAXIRADIO || RADIO_SHARK + depends on SND_FM801_TEA575X_BOOL || SND_ES1968_RADIO || RADIO_SF16FMR2 || RADIO_MAXIRADIO || RADIO_SHARK || VIDEO_BT848 + default SND_FM801 || SND_ES1968 || RADIO_SF16FMR2 || RADIO_MAXIRADIO || RADIO_SHARK || VIDEO_BT848 menuconfig SND_PCI bool "PCI sound devices"
In addition, bttv should also become dependent on SND.
Frankly, isn't it time that tea575x-tuner moves to drivers/media/common or driver/media/radio? It's really weird to have such a fairly widely used v4l module in sound.
Regards,
Hans
Re: [PATCH 3/3] bttv: Convert to generic TEA575x interface
Hi Ondrej,
Quoted 33 lines · Hans Verkuil
Quoted 10 lines · On Tue May 14 2013 22:54:45 Ondrej Zary wrote:
Remove tea575x-specific code from bttv and use the common driver instead.
Signed-off-by Ondrej Zary <[email protected]>--- drivers/media/pci/bt8xx/bttv-cards.c | 317 ++++++++++++--------------------- drivers/media/pci/bt8xx/bttv-driver.c | 6 +- drivers/media/pci/bt8xx/bttvp.h | 14 +- sound/pci/Kconfig | 4 +- 4 files changed, 124 insertions(+), 217 deletions(-)...
Quoted 6 lines
sound/pci/Kconfig +0
-0sound/pci/Kconfig line 9
Quoted 10 lines
sound/pci/Kconfig +2
-2@@ -2,8 +2,8 @@ config SND_TEA575X tristate - depends on SND_FM801_TEA575X_BOOL || SND_ES1968_RADIO || RADIO_SF16FMR2 || RADIO_MAXIRADIO || RADIO_SHARK - default SND_FM801 || SND_ES1968 || RADIO_SF16FMR2 || RADIO_MAXIRADIO || RADIO_SHARK + depends on SND_FM801_TEA575X_BOOL || SND_ES1968_RADIO || RADIO_SF16FMR2 || RADIO_MAXIRADIO || RADIO_SHARK || VIDEO_BT848 + default SND_FM801 || SND_ES1968 || RADIO_SF16FMR2 || RADIO_MAXIRADIO || RADIO_SHARK || VIDEO_BT848 menuconfig SND_PCI bool "PCI sound devices"In addition, bttv should also become dependent on SND.
Quoted 3 lines
Frankly, isn't it time that tea575x-tuner moves to
drivers/media/commonor driver/media/radio? It's really weird to have such a fairly widely used v4l module in sound.
It makes more sense to add this patch to the patch series moving tea575x to drivers/media. It simplifies the Kconfig handling substantially.
Regards,
Hans
Quoted 9 lines · On Tue May 14 2013 22:54:42 Ondrej Zary wrote:
Hello,
this patch series removes the tea575x code from bttv and uses the common tea575x driver instead. Onlyset_frequencyis implemented (signal/stereo detection or seek would require more changes to bttv).It works fine on Video Highway Xtreme but I don't have the Miro/Pinnacle or Terratec Active Radio Upgrade to test.
Quoted 8 lines
Miro/Pinnacle seems to be simple and should work.
However, I don't understand the Terratec Active Radio Upgrade code. The HW seems to need IOR, IOW and CSEL signals that were taken from ISA bus on older cards (IOR and IOW directly and CSEL from some address decoder) and are emulated here using GPIOs. But the code manipulating these signals in bttv seems to be broken - it never asserts the IOR signal. If anyone has this HW, please test if I got that right.
I wish I had this HW as well. There is a radio-terratec driver for this Radio Upgrade as well in drivers/media/radio.
Anyway, I'm OK with the first two patches, but the last needs some more work w.r.t. the bttv Kconfig (see my comment to that patch).
Regards,
Hans