Hello Jonathan, hello LinuxTV, * Jonathan Nieder [Thu, Dec 22 2011, 05:44:46PM]: > Eduard, meet the LinuxTV project. linux-media folks, meet Eduard. > Patch follows. Hello guys and sorry for the delay. > Eduard: may we have your sign-off? Please see > Documentation/SubmittingPatches, section 12 "Sign your work" for what > this means. Originally I hesitated to consider this changes trivial enough, but after adopting/rewriting many parts of it, I think we can go along with that. I also modified az6027.c to the symbolic name structure suggested by Jonathan for dw2102.c which is AFAICS already accepted in mainline kernel. Btw, there is a little potential flaw with symbolic names: an array entry without position id impilicitly goes to the position after the last used symbolic name, which might overwrite data on another position instead of adding it where it's supposed to be (like null terminator in our case). In dw2102.c that didn't matter yet because the order of enum entries matches the device id array order, but for az6027.c I added a max-value enum entry and used the reference for the null terminator. IMO it's subject for discussion whether this is needed/allowed/acceptable. And there is another fix from LKML for a regression affecting several drivers including dw2102, and AFAICS it is not fixed neither in linux-3.3-rc* nor in linux-media branch yet. Regards, Eduard.
>From 650ff9ccd82ef11a4b87feaff9c619e562ab898a Mon Sep 17 00:00:00 2001 From: Eduard Bloch <blade@xxxxxxxxxx> Date: Sat, 10 Mar 2012 16:13:51 +0100 Subject: [PATCH] Squashed commit of the following: az6027.c: Use C99 style array initialization with position identifiers az6027.c: Added USB ID of latest TERRATEC S7 revision dw2102.c: Added USB ID of latest TERRATEC Cinergy S2 USB HD dvb_frontend.c: From LKML, Signed-off-by: Simon Arlott <simon@xxxxxxxxxxx>, fixes regression from 7e0722215a510921cbb73ab4c37477d4dcb91bf8 Signed-off-by: Eduard Bloch <blade@xxxxxxxxxx> --- drivers/media/dvb/dvb-core/dvb_frontend.c | 2 + drivers/media/dvb/dvb-usb/az6027.c | 45 ++++++++++++++++++++--------- drivers/media/dvb/dvb-usb/dvb-usb-ids.h | 1 + drivers/media/dvb/dvb-usb/dw2102.c | 16 +++++++++- 4 files changed, 49 insertions(+), 15 deletions(-) diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c index fbbe545..4555baa 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb/dvb-core/dvb_frontend.c @@ -655,6 +655,8 @@ restart: dprintk("%s: Retune requested, FESTATE_RETUNE\n", __func__); re_tune = true; fepriv->state = FESTATE_TUNED; + } else { + re_tune = false; } if (fe->ops.tune) diff --git a/drivers/media/dvb/dvb-usb/az6027.c b/drivers/media/dvb/dvb-usb/az6027.c index 5e45ae6..eee669c 100644 --- a/drivers/media/dvb/dvb-usb/az6027.c +++ b/drivers/media/dvb/dvb-usb/az6027.c @@ -1079,15 +1079,28 @@ int az6027_identify_state(struct usb_device *udev, return 0; } +enum az6027_table_entry { + AZUREWAVE_AZ6027, + ELGATO_EYETV_SAT, + TECHNISAT_USB2_HDCI_V1, + TECHNISAT_USB2_HDCI_V2, + TERRATEC_DVBS2CI_V1, + TERRATEC_DVBS2CI_V2, + TERRATEC_DVBS2CI_V3, + + az6027_table_entry_enum_max +}; static struct usb_device_id az6027_usb_table[] = { - { USB_DEVICE(USB_VID_AZUREWAVE, USB_PID_AZUREWAVE_AZ6027) }, - { USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_DVBS2CI_V1) }, - { USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_DVBS2CI_V2) }, - { USB_DEVICE(USB_VID_TECHNISAT, USB_PID_TECHNISAT_USB2_HDCI_V1) }, - { USB_DEVICE(USB_VID_TECHNISAT, USB_PID_TECHNISAT_USB2_HDCI_V2) }, - { USB_DEVICE(USB_VID_ELGATO, USB_PID_ELGATO_EYETV_SAT) }, - { }, + [AZUREWAVE_AZ6027] = { USB_DEVICE(USB_VID_AZUREWAVE, USB_PID_AZUREWAVE_AZ6027) }, + [ELGATO_EYETV_SAT] = { USB_DEVICE(USB_VID_ELGATO, USB_PID_ELGATO_EYETV_SAT) }, + [TECHNISAT_USB2_HDCI_V1] = { USB_DEVICE(USB_VID_TECHNISAT, USB_PID_TECHNISAT_USB2_HDCI_V1) }, + [TECHNISAT_USB2_HDCI_V2] = { USB_DEVICE(USB_VID_TECHNISAT, USB_PID_TECHNISAT_USB2_HDCI_V2) }, + [TERRATEC_DVBS2CI_V1] = { USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_DVBS2CI_V1) }, + [TERRATEC_DVBS2CI_V2] = { USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_DVBS2CI_V2) }, + [TERRATEC_DVBS2CI_V3] = { USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_DVBS2CI_V3) }, + + [az6027_table_entry_enum_max] = { 0 } }; MODULE_DEVICE_TABLE(usb, az6027_usb_table); @@ -1135,31 +1148,35 @@ static struct dvb_usb_device_properties az6027_properties = { .i2c_algo = &az6027_i2c_algo, - .num_device_descs = 6, + .num_device_descs = 7, .devices = { { .name = "AZUREWAVE DVB-S/S2 USB2.0 (AZ6027)", - .cold_ids = { &az6027_usb_table[0], NULL }, + .cold_ids = { &az6027_usb_table[AZUREWAVE_AZ6027], NULL }, .warm_ids = { NULL }, }, { .name = "TERRATEC S7", - .cold_ids = { &az6027_usb_table[1], NULL }, + .cold_ids = { &az6027_usb_table[TERRATEC_DVBS2CI_V1], NULL }, .warm_ids = { NULL }, }, { .name = "TERRATEC S7 MKII", - .cold_ids = { &az6027_usb_table[2], NULL }, + .cold_ids = { &az6027_usb_table[TERRATEC_DVBS2CI_V2], NULL }, .warm_ids = { NULL }, }, { .name = "Technisat SkyStar USB 2 HD CI", - .cold_ids = { &az6027_usb_table[3], NULL }, + .cold_ids = { &az6027_usb_table[TECHNISAT_USB2_HDCI_V1], NULL }, .warm_ids = { NULL }, }, { .name = "Technisat SkyStar USB 2 HD CI", - .cold_ids = { &az6027_usb_table[4], NULL }, + .cold_ids = { &az6027_usb_table[TECHNISAT_USB2_HDCI_V2], NULL }, .warm_ids = { NULL }, }, { .name = "Elgato EyeTV Sat", - .cold_ids = { &az6027_usb_table[5], NULL }, + .cold_ids = { &az6027_usb_table[ELGATO_EYETV_SAT], NULL }, + .warm_ids = { NULL }, + }, { + .name = "TERRATEC S7 Rev.3", + .cold_ids = { &az6027_usb_table[TERRATEC_DVBS2CI_V3], NULL }, .warm_ids = { NULL }, }, { NULL }, diff --git a/drivers/media/dvb/dvb-usb/dvb-usb-ids.h b/drivers/media/dvb/dvb-usb/dvb-usb-ids.h index d390dda..55cac30 100644 --- a/drivers/media/dvb/dvb-usb/dvb-usb-ids.h +++ b/drivers/media/dvb/dvb-usb/dvb-usb-ids.h @@ -331,6 +331,7 @@ #define USB_PID_AZUREWAVE_AZ6027 0x3275 #define USB_PID_TERRATEC_DVBS2CI_V1 0x10a4 #define USB_PID_TERRATEC_DVBS2CI_V2 0x10ac +#define USB_PID_TERRATEC_DVBS2CI_V3 0x10b0 #define USB_PID_TECHNISAT_USB2_HDCI_V1 0x0001 #define USB_PID_TECHNISAT_USB2_HDCI_V2 0x0002 #define USB_PID_TECHNISAT_AIRSTAR_TELESTICK_2 0x0004 diff --git a/drivers/media/dvb/dvb-usb/dw2102.c b/drivers/media/dvb/dvb-usb/dw2102.c index 451c5a7..87fcb7b 100644 --- a/drivers/media/dvb/dvb-usb/dw2102.c +++ b/drivers/media/dvb/dvb-usb/dw2102.c @@ -1181,6 +1181,14 @@ static int su3000_frontend_attach(struct dvb_usb_adapter *d) { u8 obuf[3] = { 0xe, 0x80, 0 }; u8 ibuf[] = { 0 }; + + if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) + err("command 0x0e transfer failed."); + + //power on su3000 + obuf[0] = 0xe; + obuf[1] = 0x02; + obuf[2] = 1; if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) err("command 0x0e transfer failed."); @@ -1448,6 +1456,7 @@ enum dw2102_table_entry { PROF_7500, GENIATECH_SU3000, TERRATEC_CINERGY_S2, + TERRATEC_CINERGY_S2rev2, TEVII_S480_1, TEVII_S480_2, X3M_SPC1400HD, @@ -1466,6 +1475,7 @@ static struct usb_device_id dw2102_table[] = { [PROF_7500] = {USB_DEVICE(0x3034, 0x7500)}, [GENIATECH_SU3000] = {USB_DEVICE(0x1f4d, 0x3000)}, [TERRATEC_CINERGY_S2] = {USB_DEVICE(USB_VID_TERRATEC, 0x00a8)}, + [TERRATEC_CINERGY_S2rev2] = {USB_DEVICE(USB_VID_TERRATEC, 0x00b0)}, [TEVII_S480_1] = {USB_DEVICE(0x9022, USB_PID_TEVII_S480_1)}, [TEVII_S480_2] = {USB_DEVICE(0x9022, USB_PID_TEVII_S480_2)}, [X3M_SPC1400HD] = {USB_DEVICE(0x1f4d, 0x3100)}, @@ -1857,7 +1867,7 @@ static struct dvb_usb_device_properties su3000_properties = { }}, } }, - .num_device_descs = 3, + .num_device_descs = 4, .devices = { { "SU3000HD DVB-S USB2.0", { &dw2102_table[GENIATECH_SU3000], NULL }, @@ -1871,6 +1881,10 @@ static struct dvb_usb_device_properties su3000_properties = { { &dw2102_table[X3M_SPC1400HD], NULL }, { NULL }, }, + { "Terratec Cinergy S2 USB HD Rev.2", + { &dw2102_table[TERRATEC_CINERGY_S2rev2], NULL }, + { NULL }, + }, } }; -- 1.7.9.1