From: Greg Kroah-Hartman Date: Thu, 8 May 2008 20:44:09 +0000 (-0700) Subject: some .25 patches for the next round X-Git-Tag: v2.6.25.3~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2ac1bb78eea2c326677f4b3a407614cfee338d57;p=thirdparty%2Fkernel%2Fstable-queue.git some .25 patches for the next round --- diff --git a/queue-2.6.25/series b/queue-2.6.25/series new file mode 100644 index 00000000000..3fab0580add --- /dev/null +++ b/queue-2.6.25/series @@ -0,0 +1 @@ +v4l-dvb-patch-for-various-dibcom-based-devices.patch diff --git a/queue-2.6.25/v4l-dvb-patch-for-various-dibcom-based-devices.patch b/queue-2.6.25/v4l-dvb-patch-for-various-dibcom-based-devices.patch new file mode 100644 index 00000000000..92b036f061f --- /dev/null +++ b/queue-2.6.25/v4l-dvb-patch-for-various-dibcom-based-devices.patch @@ -0,0 +1,404 @@ +From 6ca8f0b97473dcef3a754bab5239dcfcdd00b244 Mon Sep 17 00:00:00 2001 +From: Albert Comerma +Date: Sat, 29 Mar 2008 21:35:57 -0300 +Subject: V4L/DVB (7473): PATCH for various Dibcom based devices + +From: Albert Comerma + +patch 6ca8f0b97473dcef3a754bab5239dcfcdd00b244 upstream + +This patch introduces support for dvb-t for the following DiBcom based cards: + +- Terratec Cinergy HT USB XE (USB-ID: 0ccd:0058) +- Terratec Cinergy HT Express (USB-ID: 0ccd:0060) +- Pinnacle 320CX (USB-ID: 2304:022e) +- Pinnacle PCTV72e (USB-ID: 2304:0236) +- Pinnacle PCTV73e (USB-ID: 2304:0237) +- Yuan EC372S (USB-ID: 1164:1edc) + +Signed-off-by: Hans-Frieder Vogt +Signed-off-by: Felix Apitzsch +Signed-off-by: Antti Palosaari +Signed-off-by: Albert Comerma +Signed-off-by: Patrick Boettcher +Signed-off-by: Mauro Carvalho Chehab +Cc: Michel Morisot +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/dvb/dvb-usb/dib0700_devices.c | 259 ++++++++++++++++++++++++---- + drivers/media/dvb/dvb-usb/dvb-usb-ids.h | 9 + 2 files changed, 238 insertions(+), 30 deletions(-) + +--- a/drivers/media/dvb/dvb-usb/dib0700_devices.c ++++ b/drivers/media/dvb/dvb-usb/dib0700_devices.c +@@ -13,6 +13,7 @@ + #include "dib7000p.h" + #include "mt2060.h" + #include "mt2266.h" ++#include "tuner-xc2028.h" + #include "dib0070.h" + + static int force_lna_activation; +@@ -297,6 +298,149 @@ static int stk7700d_tuner_attach(struct + &stk7700d_mt2266_config[adap->id]) == NULL ? -ENODEV : 0;; + } + ++/* STK7700-PH: Digital/Analog Hybrid Tuner, e.h. Cinergy HT USB HE */ ++struct dibx000_agc_config xc3028_agc_config = { ++ BAND_VHF | BAND_UHF, /* band_caps */ ++ ++ /* P_agc_use_sd_mod1=0, P_agc_use_sd_mod2=0, P_agc_freq_pwm_div=0, ++ * P_agc_inv_pwm1=0, P_agc_inv_pwm2=0, P_agc_inh_dc_rv_est=0, ++ * P_agc_time_est=3, P_agc_freeze=0, P_agc_nb_est=2, P_agc_write=0 */ ++ (0 << 15) | (0 << 14) | (0 << 11) | (0 << 10) | (0 << 9) | (0 << 8) | ++ (3 << 5) | (0 << 4) | (2 << 1) | (0 << 0), /* setup */ ++ ++ 712, /* inv_gain */ ++ 21, /* time_stabiliz */ ++ ++ 0, /* alpha_level */ ++ 118, /* thlock */ ++ ++ 0, /* wbd_inv */ ++ 2867, /* wbd_ref */ ++ 0, /* wbd_sel */ ++ 2, /* wbd_alpha */ ++ ++ 0, /* agc1_max */ ++ 0, /* agc1_min */ ++ 39718, /* agc2_max */ ++ 9930, /* agc2_min */ ++ 0, /* agc1_pt1 */ ++ 0, /* agc1_pt2 */ ++ 0, /* agc1_pt3 */ ++ 0, /* agc1_slope1 */ ++ 0, /* agc1_slope2 */ ++ 0, /* agc2_pt1 */ ++ 128, /* agc2_pt2 */ ++ 29, /* agc2_slope1 */ ++ 29, /* agc2_slope2 */ ++ ++ 17, /* alpha_mant */ ++ 27, /* alpha_exp */ ++ 23, /* beta_mant */ ++ 51, /* beta_exp */ ++ ++ 1, /* perform_agc_softsplit */ ++}; ++ ++/* PLL Configuration for COFDM BW_MHz = 8.00 with external clock = 30.00 */ ++struct dibx000_bandwidth_config xc3028_bw_config = { ++ 60000, 30000, /* internal, sampling */ ++ 1, 8, 3, 1, 0, /* pll_cfg: prediv, ratio, range, reset, bypass */ ++ 0, 0, 1, 1, 0, /* misc: refdiv, bypclk_div, IO_CLK_en_core, ADClkSrc, ++ modulo */ ++ (3 << 14) | (1 << 12) | (524 << 0), /* sad_cfg: refsel, sel, freq_15k */ ++ (1 << 25) | 5816102, /* ifreq = 5.200000 MHz */ ++ 20452225, /* timf */ ++ 30000000, /* xtal_hz */ ++}; ++ ++static struct dib7000p_config stk7700ph_dib7700_xc3028_config = { ++ .output_mpeg2_in_188_bytes = 1, ++ .tuner_is_baseband = 1, ++ ++ .agc_config_count = 1, ++ .agc = &xc3028_agc_config, ++ .bw = &xc3028_bw_config, ++ ++ .gpio_dir = DIB7000P_GPIO_DEFAULT_DIRECTIONS, ++ .gpio_val = DIB7000P_GPIO_DEFAULT_VALUES, ++ .gpio_pwm_pos = DIB7000P_GPIO_DEFAULT_PWM_POS, ++}; ++ ++static int stk7700ph_xc3028_callback(void *ptr, int command, int arg) ++{ ++ struct dvb_usb_adapter *adap = ptr; ++ ++ switch (command) { ++ case XC2028_TUNER_RESET: ++ /* Send the tuner in then out of reset */ ++ dib7000p_set_gpio(adap->fe, 8, 0, 0); msleep(10); ++ dib7000p_set_gpio(adap->fe, 8, 0, 1); ++ break; ++ case XC2028_RESET_CLK: ++ break; ++ default: ++ err("%s: unknown command %d, arg %d\n", __func__, ++ command, arg); ++ return -EINVAL; ++ } ++ return 0; ++} ++ ++static struct xc2028_ctrl stk7700ph_xc3028_ctrl = { ++ .fname = XC2028_DEFAULT_FIRMWARE, ++ .max_len = 64, ++ .demod = XC3028_FE_DIBCOM52, ++}; ++ ++static struct xc2028_config stk7700ph_xc3028_config = { ++ .i2c_addr = 0x61, ++ .callback = stk7700ph_xc3028_callback, ++ .ctrl = &stk7700ph_xc3028_ctrl, ++}; ++ ++static int stk7700ph_frontend_attach(struct dvb_usb_adapter *adap) ++{ ++ struct usb_device_descriptor *desc = &adap->dev->udev->descriptor; ++ ++ if (desc->idVendor == USB_VID_PINNACLE && ++ desc->idProduct == USB_PID_PINNACLE_EXPRESSCARD_320CX) ++ dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 0); ++ else ++ dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 1); ++ msleep(20); ++ dib0700_set_gpio(adap->dev, GPIO9, GPIO_OUT, 1); ++ dib0700_set_gpio(adap->dev, GPIO4, GPIO_OUT, 1); ++ dib0700_set_gpio(adap->dev, GPIO7, GPIO_OUT, 1); ++ dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 0); ++ msleep(10); ++ dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 1); ++ msleep(20); ++ dib0700_set_gpio(adap->dev, GPIO0, GPIO_OUT, 1); ++ msleep(10); ++ ++ dib7000p_i2c_enumeration(&adap->dev->i2c_adap, 1, 18, ++ &stk7700ph_dib7700_xc3028_config); ++ ++ adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, ++ &stk7700ph_dib7700_xc3028_config); ++ ++ return adap->fe == NULL ? -ENODEV : 0; ++} ++ ++static int stk7700ph_tuner_attach(struct dvb_usb_adapter *adap) ++{ ++ struct i2c_adapter *tun_i2c; ++ ++ tun_i2c = dib7000p_get_i2c_master(adap->fe, ++ DIBX000_I2C_INTERFACE_TUNER, 1); ++ ++ stk7700ph_xc3028_config.i2c_adap = tun_i2c; ++ stk7700ph_xc3028_config.video_dev = adap; ++ ++ return dvb_attach(xc2028_attach, adap->fe, &stk7700ph_xc3028_config) ++ == NULL ? -ENODEV : 0; ++} ++ + #define DEFAULT_RC_INTERVAL 150 + + static u8 rc_request[] = { REQUEST_POLL_RC, 0 }; +@@ -794,6 +938,10 @@ static struct dib7000p_config dib7070p_d + /* STK7070P */ + static int stk7070p_frontend_attach(struct dvb_usb_adapter *adap) + { ++ if (adap->dev->udev->descriptor.idVendor == USB_VID_PINNACLE && ++ adap->dev->udev->descriptor.idProduct == USB_PID_PINNACLE_PCTV72E) ++ dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 0); ++ else + dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 1); + msleep(10); + dib0700_set_gpio(adap->dev, GPIO9, GPIO_OUT, 1); +@@ -808,9 +956,11 @@ static int stk7070p_frontend_attach(stru + msleep(10); + dib0700_set_gpio(adap->dev, GPIO0, GPIO_OUT, 1); + +- dib7000p_i2c_enumeration(&adap->dev->i2c_adap, 1, 18, &dib7070p_dib7000p_config); ++ dib7000p_i2c_enumeration(&adap->dev->i2c_adap, 1, 18, ++ &dib7070p_dib7000p_config); + +- adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, &dib7070p_dib7000p_config); ++ adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, ++ &dib7070p_dib7000p_config); + return adap->fe == NULL ? -ENODEV : 0; + } + +@@ -878,34 +1028,41 @@ static int stk7070pd_frontend_attach1(st + /* DVB-USB and USB stuff follows */ + struct usb_device_id dib0700_usb_id_table[] = { + /* 0 */ { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_STK7700P) }, +- { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_STK7700P_PC) }, +- +- { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_NOVA_T_500) }, +- { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_NOVA_T_500_2) }, +- { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_NOVA_T_STICK) }, ++ { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_STK7700P_PC) }, ++ { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_NOVA_T_500) }, ++ { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_NOVA_T_500_2) }, ++ { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_NOVA_T_STICK) }, + /* 5 */ { USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR) }, +- { USB_DEVICE(USB_VID_COMPRO, USB_PID_COMPRO_VIDEOMATE_U500) }, +- { USB_DEVICE(USB_VID_UNIWILL, USB_PID_UNIWILL_STK7700P) }, +- { USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV_DONGLE_STK7700P) }, +- { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_NOVA_T_STICK_2) }, ++ { USB_DEVICE(USB_VID_COMPRO, USB_PID_COMPRO_VIDEOMATE_U500) }, ++ { USB_DEVICE(USB_VID_UNIWILL, USB_PID_UNIWILL_STK7700P) }, ++ { USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV_DONGLE_STK7700P) }, ++ { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_NOVA_T_STICK_2) }, + /* 10 */{ USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR_2) }, +- { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV2000E) }, +- { USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY) }, +- { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_NOVA_TD_STICK) }, +- { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_STK7700D) }, ++ { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV2000E) }, ++ { USB_DEVICE(USB_VID_TERRATEC, ++ USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY) }, ++ { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_NOVA_TD_STICK) }, ++ { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_STK7700D) }, + /* 15 */{ USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_STK7070P) }, +- { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV_DVB_T_FLASH) }, +- { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_STK7070PD) }, +- { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV_DUAL_DIVERSITY_DVB_T) }, +- { USB_DEVICE(USB_VID_COMPRO, USB_PID_COMPRO_VIDEOMATE_U500_PC) }, ++ { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV_DVB_T_FLASH) }, ++ { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_STK7070PD) }, ++ { USB_DEVICE(USB_VID_PINNACLE, ++ USB_PID_PINNACLE_PCTV_DUAL_DIVERSITY_DVB_T) }, ++ { USB_DEVICE(USB_VID_COMPRO, USB_PID_COMPRO_VIDEOMATE_U500_PC) }, + /* 20 */{ USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_EXPRESS) }, +- { USB_DEVICE(USB_VID_GIGABYTE, USB_PID_GIGABYTE_U7000) }, +- { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ARTEC_T14BR) }, +- { USB_DEVICE(USB_VID_ASUS, USB_PID_ASUS_U3000) }, +- { USB_DEVICE(USB_VID_ASUS, USB_PID_ASUS_U3100) }, +-/* 25 */ { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_NOVA_T_STICK_3) }, +- { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_MYTV_T) }, +- { 0 } /* Terminating entry */ ++ { USB_DEVICE(USB_VID_GIGABYTE, USB_PID_GIGABYTE_U7000) }, ++ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ARTEC_T14BR) }, ++ { USB_DEVICE(USB_VID_ASUS, USB_PID_ASUS_U3000) }, ++ { USB_DEVICE(USB_VID_ASUS, USB_PID_ASUS_U3100) }, ++/* 25 */{ USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_NOVA_T_STICK_3) }, ++ { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_MYTV_T) }, ++ { USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_HT_USB_XE) }, ++ { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_EXPRESSCARD_320CX) }, ++ { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV72E) }, ++/* 30 */{ USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV73E) }, ++ { USB_DEVICE(USB_VID_YUAN, USB_PID_YUAN_EC372S) }, ++ { USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_HT_EXPRESS) }, ++ { 0 } /* Terminating entry */ + }; + MODULE_DEVICE_TABLE(usb, dib0700_usb_id_table); + +@@ -1069,12 +1226,16 @@ struct dvb_usb_device_properties dib0700 + }, + }, + +- .num_device_descs = 1, ++ .num_device_descs = 2, + .devices = { + { "ASUS My Cinema U3000 Mini DVBT Tuner", + { &dib0700_usb_id_table[23], NULL }, + { NULL }, + }, ++ { "Yuan EC372S", ++ { &dib0700_usb_id_table[31], NULL }, ++ { NULL }, ++ } + } + }, { DIB0700_DEFAULT_DEVICE_PROPERTIES, + +@@ -1090,7 +1251,7 @@ struct dvb_usb_device_properties dib0700 + }, + }, + +- .num_device_descs = 6, ++ .num_device_descs = 8, + .devices = { + { "DiBcom STK7070P reference design", + { &dib0700_usb_id_table[15], NULL }, +@@ -1116,6 +1277,14 @@ struct dvb_usb_device_properties dib0700 + { &dib0700_usb_id_table[26], NULL }, + { NULL }, + }, ++ { "Pinnacle PCTV 72e", ++ { &dib0700_usb_id_table[29], NULL }, ++ { NULL }, ++ }, ++ { "Pinnacle PCTV 73e", ++ { &dib0700_usb_id_table[30], NULL }, ++ { NULL }, ++ }, + }, + + .rc_interval = DEFAULT_RC_INTERVAL, +@@ -1155,6 +1324,40 @@ struct dvb_usb_device_properties dib0700 + { NULL }, + } + } ++ }, { DIB0700_DEFAULT_DEVICE_PROPERTIES, ++ ++ .num_adapters = 1, ++ .adapter = { ++ { ++ .frontend_attach = stk7700ph_frontend_attach, ++ .tuner_attach = stk7700ph_tuner_attach, ++ ++ DIB0700_DEFAULT_STREAMING_CONFIG(0x02), ++ ++ .size_of_priv = sizeof(struct ++ dib0700_adapter_state), ++ }, ++ }, ++ ++ .num_device_descs = 3, ++ .devices = { ++ { "Terratec Cinergy HT USB XE", ++ { &dib0700_usb_id_table[27], NULL }, ++ { NULL }, ++ }, ++ { "Pinnacle Expresscard 320cx", ++ { &dib0700_usb_id_table[28], NULL }, ++ { NULL }, ++ }, ++ { "Terratec Cinergy HT Express", ++ { &dib0700_usb_id_table[32], NULL }, ++ { NULL }, ++ }, ++ }, ++ .rc_interval = DEFAULT_RC_INTERVAL, ++ .rc_key_map = dib0700_rc_keys, ++ .rc_key_map_size = ARRAY_SIZE(dib0700_rc_keys), ++ .rc_query = dib0700_rc_query + }, + }; + +--- a/drivers/media/dvb/dvb-usb/dvb-usb-ids.h ++++ b/drivers/media/dvb/dvb-usb/dvb-usb-ids.h +@@ -46,8 +46,8 @@ + #define USB_VID_ULTIMA_ELECTRONIC 0x05d8 + #define USB_VID_UNIWILL 0x1584 + #define USB_VID_WIDEVIEW 0x14aa +-/* dom : pour gigabyte u7000 */ + #define USB_VID_GIGABYTE 0x1044 ++#define USB_VID_YUAN 0x1164 + + + /* Product IDs */ +@@ -135,9 +135,14 @@ + #define USB_PID_AVERMEDIA_VOLAR 0xa807 + #define USB_PID_AVERMEDIA_VOLAR_2 0xb808 + #define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY 0x005a ++#define USB_PID_TERRATEC_CINERGY_HT_USB_XE 0x0058 ++#define USB_PID_TERRATEC_CINERGY_HT_EXPRESS 0x0060 ++#define USB_PID_PINNACLE_EXPRESSCARD_320CX 0x022e + #define USB_PID_PINNACLE_PCTV2000E 0x022c + #define USB_PID_PINNACLE_PCTV_DVB_T_FLASH 0x0228 + #define USB_PID_PINNACLE_PCTV_DUAL_DIVERSITY_DVB_T 0x0229 ++#define USB_PID_PINNACLE_PCTV72E 0x0236 ++#define USB_PID_PINNACLE_PCTV73E 0x0237 + #define USB_PID_PCTV_200E 0x020e + #define USB_PID_PCTV_400E 0x020f + #define USB_PID_PCTV_450E 0x0222 +@@ -183,9 +188,9 @@ + #define USB_PID_OPERA1_WARM 0x3829 + #define USB_PID_LIFEVIEW_TV_WALKER_TWIN_COLD 0x0514 + #define USB_PID_LIFEVIEW_TV_WALKER_TWIN_WARM 0x0513 +-/* dom pour gigabyte u7000 */ + #define USB_PID_GIGABYTE_U7000 0x7001 + #define USB_PID_ASUS_U3000 0x171f + #define USB_PID_ASUS_U3100 0x173f ++#define USB_PID_YUAN_EC372S 0x1edc + + #endif