aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/dvb/dvb-usb/dib0700_devices.c76
-rw-r--r--drivers/media/dvb/dvb-usb/dvb-usb-ids.h1
2 files changed, 77 insertions, 0 deletions
diff --git a/drivers/media/dvb/dvb-usb/dib0700_devices.c b/drivers/media/dvb/dvb-usb/dib0700_devices.c
index ec0dd255c0ec..dd0294e5ff58 100644
--- a/drivers/media/dvb/dvb-usb/dib0700_devices.c
+++ b/drivers/media/dvb/dvb-usb/dib0700_devices.c
@@ -1122,6 +1122,15 @@ static struct dib0070_config dib7070p_dib0070_config[2] = {
1122 } 1122 }
1123}; 1123};
1124 1124
1125static struct dib0070_config dib7770p_dib0070_config = {
1126 .i2c_address = DEFAULT_DIB0070_I2C_ADDRESS,
1127 .reset = dib7070_tuner_reset,
1128 .sleep = dib7070_tuner_sleep,
1129 .clock_khz = 12000,
1130 .clock_pad_drive = 0,
1131 .flip_chip = 1,
1132};
1133
1125static int dib7070_set_param_override(struct dvb_frontend *fe, struct dvb_frontend_parameters *fep) 1134static int dib7070_set_param_override(struct dvb_frontend *fe, struct dvb_frontend_parameters *fep)
1126{ 1135{
1127 struct dvb_usb_adapter *adap = fe->dvb->priv; 1136 struct dvb_usb_adapter *adap = fe->dvb->priv;
@@ -1139,6 +1148,45 @@ static int dib7070_set_param_override(struct dvb_frontend *fe, struct dvb_fronte
1139 return state->set_param_save(fe, fep); 1148 return state->set_param_save(fe, fep);
1140} 1149}
1141 1150
1151static int dib7770_set_param_override(struct dvb_frontend *fe,
1152 struct dvb_frontend_parameters *fep)
1153{
1154 struct dvb_usb_adapter *adap = fe->dvb->priv;
1155 struct dib0700_adapter_state *state = adap->priv;
1156
1157 u16 offset;
1158 u8 band = BAND_OF_FREQUENCY(fep->frequency/1000);
1159 switch (band) {
1160 case BAND_VHF:
1161 dib7000p_set_gpio(fe, 0, 0, 1);
1162 offset = 850;
1163 break;
1164 case BAND_UHF:
1165 default:
1166 dib7000p_set_gpio(fe, 0, 0, 0);
1167 offset = 250;
1168 break;
1169 }
1170 deb_info("WBD for DiB7000P: %d\n", offset + dib0070_wbd_offset(fe));
1171 dib7000p_set_wbd_ref(fe, offset + dib0070_wbd_offset(fe));
1172 return state->set_param_save(fe, fep);
1173}
1174
1175static int dib7770p_tuner_attach(struct dvb_usb_adapter *adap)
1176{
1177 struct dib0700_adapter_state *st = adap->priv;
1178 struct i2c_adapter *tun_i2c = dib7000p_get_i2c_master(adap->fe,
1179 DIBX000_I2C_INTERFACE_TUNER, 1);
1180
1181 if (dvb_attach(dib0070_attach, adap->fe, tun_i2c,
1182 &dib7770p_dib0070_config) == NULL)
1183 return -ENODEV;
1184
1185 st->set_param_save = adap->fe->ops.tuner_ops.set_params;
1186 adap->fe->ops.tuner_ops.set_params = dib7770_set_param_override;
1187 return 0;
1188}
1189
1142static int dib7070p_tuner_attach(struct dvb_usb_adapter *adap) 1190static int dib7070p_tuner_attach(struct dvb_usb_adapter *adap)
1143{ 1191{
1144 struct dib0700_adapter_state *st = adap->priv; 1192 struct dib0700_adapter_state *st = adap->priv;
@@ -1504,6 +1552,7 @@ struct usb_device_id dib0700_usb_id_table[] = {
1504 { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV73A) }, 1552 { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV73A) },
1505 { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV73ESE) }, 1553 { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV73ESE) },
1506 { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV282E) }, 1554 { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV282E) },
1555 { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_STK7770P) },
1507 { 0 } /* Terminating entry */ 1556 { 0 } /* Terminating entry */
1508}; 1557};
1509MODULE_DEVICE_TABLE(usb, dib0700_usb_id_table); 1558MODULE_DEVICE_TABLE(usb, dib0700_usb_id_table);
@@ -1965,6 +2014,33 @@ struct dvb_usb_device_properties dib0700_devices[] = {
1965 { NULL }, 2014 { NULL },
1966 }, 2015 },
1967 }, 2016 },
2017 }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
2018
2019 .num_adapters = 1,
2020 .adapter = {
2021 {
2022 .frontend_attach = stk7070p_frontend_attach,
2023 .tuner_attach = dib7770p_tuner_attach,
2024
2025 DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
2026
2027 .size_of_priv =
2028 sizeof(struct dib0700_adapter_state),
2029 },
2030 },
2031
2032 .num_device_descs = 1,
2033 .devices = {
2034 { "DiBcom STK7770P reference design",
2035 { &dib0700_usb_id_table[59], NULL },
2036 { NULL },
2037 },
2038 },
2039
2040 .rc_interval = DEFAULT_RC_INTERVAL,
2041 .rc_key_map = dib0700_rc_keys,
2042 .rc_key_map_size = ARRAY_SIZE(dib0700_rc_keys),
2043 .rc_query = dib0700_rc_query
1968 }, 2044 },
1969}; 2045};
1970 2046
diff --git a/drivers/media/dvb/dvb-usb/dvb-usb-ids.h b/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
index eec5604dcdd0..a77d305e30d0 100644
--- a/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
+++ b/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
@@ -96,6 +96,7 @@
96#define USB_PID_DIBCOM_STK7070P 0x1ebc 96#define USB_PID_DIBCOM_STK7070P 0x1ebc
97#define USB_PID_DIBCOM_STK7070PD 0x1ebe 97#define USB_PID_DIBCOM_STK7070PD 0x1ebe
98#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131 98#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131
99#define USB_PID_DIBCOM_STK7770P 0x1e80
99#define USB_PID_DPOSH_M9206_COLD 0x9206 100#define USB_PID_DPOSH_M9206_COLD 0x9206
100#define USB_PID_DPOSH_M9206_WARM 0xa090 101#define USB_PID_DPOSH_M9206_WARM 0xa090
101#define USB_PID_UNIWILL_STK7700P 0x6003 102#define USB_PID_UNIWILL_STK7700P 0x6003