Re: [PATCH 2/6] m88ds3103, dvbsky dvb-s2 usb box.

2012-04-20 Thread Mauro Carvalho Chehab
Em 20-04-2012 05:08, nibble.max escreveu:
 2012-04-20 16:02:41 nibble@gmail.com
 Em 15-04-2012 12:53, nibble.max escreveu:
 +static struct dvb_usb_device_properties US6830_properties = {
 +   .caps = DVB_USB_IS_AN_I2C_ADAPTER,
 +   .usb_ctrl = DEVICE_SPECIFIC,
 +   .size_of_priv = sizeof(struct su3000_state),
 +   .power_ctrl = su3000_power_ctrl,
 +   .num_adapters = 1,
 +   .identify_state = su3000_identify_state,
 +   .i2c_algo = su3000_i2c_algo,
 +
 +   .rc.legacy = {
 +   .rc_map_table = rc_map_su3000_table,
 +   .rc_map_size = ARRAY_SIZE(rc_map_su3000_table),
 +   .rc_interval = 150,
 +   .rc_query = dw2102_rc_query,
 +   },


 New drivers should use .rc.core instead. For a simple example on how to use,
 please take a look at the az6007 driver.

 It is strange to me that I need write two keymaps for one remote controller, 
 one for USB box, the other for pcie cards.
 rc.core will save my time to keep one keymap for all. :)
 

One remote controller just needs one keymap file. If the same IR requires two 
different
tables, then something is wrong at the get_key function (or, for drivers where 
only the
lower 8bits are returned - the IR mask is not properly set).

Regards,
Mauro
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/6] m88ds3103, dvbsky dvb-s2 usb box.

2012-04-19 Thread Mauro Carvalho Chehab
Em 15-04-2012 12:53, nibble.max escreveu:
 dvbsky dvb-s2 usb box based on montage m88ds3103 demodulator.
 
 Signed-off-by: Max nibble nibble@gmail.com
 ---
  drivers/media/dvb/dvb-usb/Kconfig  |1 +
  drivers/media/dvb/dvb-usb/dw2102.c |  236 
 +++-
  2 files changed, 236 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/media/dvb/dvb-usb/Kconfig 
 b/drivers/media/dvb/dvb-usb/Kconfig
 index be1db75..bf63f29 100644
 --- a/drivers/media/dvb/dvb-usb/Kconfig
 +++ b/drivers/media/dvb/dvb-usb/Kconfig
 @@ -279,6 +279,7 @@ config DVB_USB_DW2102
   select DVB_STV0288 if !DVB_FE_CUSTOMISE
   select DVB_STB6000 if !DVB_FE_CUSTOMISE
   select DVB_CX24116 if !DVB_FE_CUSTOMISE
 + select DVB_M88DS3103 if !DVB_FE_CUSTOMISE
   select DVB_SI21XX if !DVB_FE_CUSTOMISE
   select DVB_TDA10023 if !DVB_FE_CUSTOMISE
   select DVB_MT312 if !DVB_FE_CUSTOMISE
 diff --git a/drivers/media/dvb/dvb-usb/dw2102.c 
 b/drivers/media/dvb/dvb-usb/dw2102.c
 index 451c5a7..0b1bbd2 100644
 --- a/drivers/media/dvb/dvb-usb/dw2102.c
 +++ b/drivers/media/dvb/dvb-usb/dw2102.c
 @@ -19,6 +19,7 @@
  #include stb6000.h
  #include eds1547.h
  #include cx24116.h
 +#include m88ds3103.h
  #include tda1002x.h
  #include mt312.h
  #include zl10039.h
 @@ -882,6 +883,44 @@ static int s660_set_voltage(struct dvb_frontend *fe, 
 fe_sec_voltage_t voltage)
   return 0;
  }
  
 +static int bstusb_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t 
 voltage)
 +{
 +
 + struct dvb_usb_adapter *udev_adap =
 + (struct dvb_usb_adapter *)(fe-dvb-priv);
 +
 + u8 obuf[3] = { 0xe, 0x80, 0 };
 + u8 ibuf[] = { 0 };
 + 
 + info(US6830: %s!\n, __func__);
 + 
 + if (voltage == SEC_VOLTAGE_OFF)
 + obuf[2] = 0;
 + else 
 + obuf[2] = 1;
 + 
 + if (dvb_usb_generic_rw(udev_adap-dev, obuf, 3, ibuf, 1, 0)  0)
 + err(command 0x0e transfer failed.);
 + 
 + return 0;
 +}
 +
 +static int bstusb_restart(struct dvb_frontend *fe)
 +{
 +
 + struct dvb_usb_adapter *udev_adap =
 + (struct dvb_usb_adapter *)(fe-dvb-priv);
 + 
 + u8 obuf[3] = { 0x36, 3, 0 };
 + u8 ibuf[] = { 0 };
 + 
 +
 + if (dvb_usb_generic_rw(udev_adap-dev, obuf, 3, ibuf, 1, 0)  0)
 + err(command 0x36 transfer failed.);
 + 
 + return 0;
 +}
 +
  static void dw210x_led_ctrl(struct dvb_frontend *fe, int offon)
  {
   static u8 led_off[] = { 0 };
 @@ -987,6 +1026,24 @@ static struct ds3000_config su3000_ds3000_config = {
   .ci_mode = 1,
  };
  
 +static struct m88ds3103_config US6830_ds3103_config = {
 + .demod_address = 0x68,
 + .ci_mode = 1,
 + .pin_ctrl = 0x83,
 + .ts_mode = 0,
 + .start_ctrl = bstusb_restart,
 + .set_voltage = bstusb_set_voltage,
 +};
 +
 +static struct m88ds3103_config US6832_ds3103_config = {
 + .demod_address = 0x68,
 + .ci_mode = 1,
 + .pin_ctrl = 0x80,
 + .ts_mode = 0,
 + .start_ctrl = bstusb_restart,
 + .set_voltage = bstusb_set_voltage,
 +};
 +
  static int dw2104_frontend_attach(struct dvb_usb_adapter *d)
  {
   struct dvb_tuner_ops *tuner_ops = NULL;
 @@ -1214,6 +1271,72 @@ static int su3000_frontend_attach(struct 
 dvb_usb_adapter *d)
   return 0;
  }
  
 +static int US6830_frontend_attach(struct dvb_usb_adapter *d)
 +{
 + u8 obuf[3] = { 0xe, 0x83, 0 };
 + u8 ibuf[] = { 0 };
 +
 +
 + info(US6830: %s!\n, __func__);
 + 
 + if (dvb_usb_generic_rw(d-dev, obuf, 3, ibuf, 1, 0)  0)
 + err(command 0x0e transfer failed.);
 +
 + obuf[0] = 0xe;
 + obuf[1] = 0x83;
 + obuf[2] = 1;
 +
 + if (dvb_usb_generic_rw(d-dev, obuf, 3, ibuf, 1, 0)  0)
 + err(command 0x0e transfer failed.);
 +
 + obuf[0] = 0x51;
 +
 + if (dvb_usb_generic_rw(d-dev, obuf, 1, ibuf, 1, 0)  0)
 + err(command 0x51 transfer failed.);
 +
 + d-fe_adap[0].fe = dvb_attach(m88ds3103_attach, US6830_ds3103_config,
 + d-dev-i2c_adap);
 + if (d-fe_adap[0].fe == NULL)
 + return -EIO;
 +
 + info(Attached M88DS3103!\n);
 +
 + return 0;
 +}
 +
 +static int US6832_frontend_attach(struct dvb_usb_adapter *d)
 +{
 + u8 obuf[3] = { 0xe, 0x83, 0 };
 + u8 ibuf[] = { 0 };
 +
 +
 + info(US6832: %s!\n, __func__);
 + 
 + if (dvb_usb_generic_rw(d-dev, obuf, 3, ibuf, 1, 0)  0)
 + err(command 0x0e transfer failed.);
 +
 + obuf[0] = 0xe;
 + obuf[1] = 0x83;
 + obuf[2] = 1;
 +
 + if (dvb_usb_generic_rw(d-dev, obuf, 3, ibuf, 1, 0)  0)
 + err(command 0x0e transfer failed.);
 +
 + obuf[0] = 0x51;
 +
 + if (dvb_usb_generic_rw(d-dev, obuf, 1, ibuf, 1, 0)  0)
 + err(command 0x51 transfer failed.);
 +
 + d-fe_adap[0].fe = dvb_attach(m88ds3103_attach, US6832_ds3103_config,
 + 

[PATCH 2/6] m88ds3103, dvbsky dvb-s2 usb box.

2012-04-15 Thread nibble.max
dvbsky dvb-s2 usb box based on montage m88ds3103 demodulator.

Signed-off-by: Max nibble nibble@gmail.com
---
 drivers/media/dvb/dvb-usb/Kconfig  |1 +
 drivers/media/dvb/dvb-usb/dw2102.c |  236 +++-
 2 files changed, 236 insertions(+), 1 deletion(-)

diff --git a/drivers/media/dvb/dvb-usb/Kconfig 
b/drivers/media/dvb/dvb-usb/Kconfig
index be1db75..bf63f29 100644
--- a/drivers/media/dvb/dvb-usb/Kconfig
+++ b/drivers/media/dvb/dvb-usb/Kconfig
@@ -279,6 +279,7 @@ config DVB_USB_DW2102
select DVB_STV0288 if !DVB_FE_CUSTOMISE
select DVB_STB6000 if !DVB_FE_CUSTOMISE
select DVB_CX24116 if !DVB_FE_CUSTOMISE
+   select DVB_M88DS3103 if !DVB_FE_CUSTOMISE
select DVB_SI21XX if !DVB_FE_CUSTOMISE
select DVB_TDA10023 if !DVB_FE_CUSTOMISE
select DVB_MT312 if !DVB_FE_CUSTOMISE
diff --git a/drivers/media/dvb/dvb-usb/dw2102.c 
b/drivers/media/dvb/dvb-usb/dw2102.c
index 451c5a7..0b1bbd2 100644
--- a/drivers/media/dvb/dvb-usb/dw2102.c
+++ b/drivers/media/dvb/dvb-usb/dw2102.c
@@ -19,6 +19,7 @@
 #include stb6000.h
 #include eds1547.h
 #include cx24116.h
+#include m88ds3103.h
 #include tda1002x.h
 #include mt312.h
 #include zl10039.h
@@ -882,6 +883,44 @@ static int s660_set_voltage(struct dvb_frontend *fe, 
fe_sec_voltage_t voltage)
return 0;
 }
 
+static int bstusb_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t 
voltage)
+{
+
+   struct dvb_usb_adapter *udev_adap =
+   (struct dvb_usb_adapter *)(fe-dvb-priv);
+
+   u8 obuf[3] = { 0xe, 0x80, 0 };
+   u8 ibuf[] = { 0 };
+   
+   info(US6830: %s!\n, __func__);
+   
+   if (voltage == SEC_VOLTAGE_OFF)
+   obuf[2] = 0;
+   else 
+   obuf[2] = 1;
+   
+   if (dvb_usb_generic_rw(udev_adap-dev, obuf, 3, ibuf, 1, 0)  0)
+   err(command 0x0e transfer failed.);
+   
+   return 0;
+}
+
+static int bstusb_restart(struct dvb_frontend *fe)
+{
+
+   struct dvb_usb_adapter *udev_adap =
+   (struct dvb_usb_adapter *)(fe-dvb-priv);
+   
+   u8 obuf[3] = { 0x36, 3, 0 };
+   u8 ibuf[] = { 0 };
+   
+
+   if (dvb_usb_generic_rw(udev_adap-dev, obuf, 3, ibuf, 1, 0)  0)
+   err(command 0x36 transfer failed.);
+   
+   return 0;
+}
+
 static void dw210x_led_ctrl(struct dvb_frontend *fe, int offon)
 {
static u8 led_off[] = { 0 };
@@ -987,6 +1026,24 @@ static struct ds3000_config su3000_ds3000_config = {
.ci_mode = 1,
 };
 
+static struct m88ds3103_config US6830_ds3103_config = {
+   .demod_address = 0x68,
+   .ci_mode = 1,
+   .pin_ctrl = 0x83,
+   .ts_mode = 0,
+   .start_ctrl = bstusb_restart,
+   .set_voltage = bstusb_set_voltage,
+};
+
+static struct m88ds3103_config US6832_ds3103_config = {
+   .demod_address = 0x68,
+   .ci_mode = 1,
+   .pin_ctrl = 0x80,
+   .ts_mode = 0,
+   .start_ctrl = bstusb_restart,
+   .set_voltage = bstusb_set_voltage,
+};
+
 static int dw2104_frontend_attach(struct dvb_usb_adapter *d)
 {
struct dvb_tuner_ops *tuner_ops = NULL;
@@ -1214,6 +1271,72 @@ static int su3000_frontend_attach(struct dvb_usb_adapter 
*d)
return 0;
 }
 
+static int US6830_frontend_attach(struct dvb_usb_adapter *d)
+{
+   u8 obuf[3] = { 0xe, 0x83, 0 };
+   u8 ibuf[] = { 0 };
+
+
+   info(US6830: %s!\n, __func__);
+   
+   if (dvb_usb_generic_rw(d-dev, obuf, 3, ibuf, 1, 0)  0)
+   err(command 0x0e transfer failed.);
+
+   obuf[0] = 0xe;
+   obuf[1] = 0x83;
+   obuf[2] = 1;
+
+   if (dvb_usb_generic_rw(d-dev, obuf, 3, ibuf, 1, 0)  0)
+   err(command 0x0e transfer failed.);
+
+   obuf[0] = 0x51;
+
+   if (dvb_usb_generic_rw(d-dev, obuf, 1, ibuf, 1, 0)  0)
+   err(command 0x51 transfer failed.);
+
+   d-fe_adap[0].fe = dvb_attach(m88ds3103_attach, US6830_ds3103_config,
+   d-dev-i2c_adap);
+   if (d-fe_adap[0].fe == NULL)
+   return -EIO;
+
+   info(Attached M88DS3103!\n);
+
+   return 0;
+}
+
+static int US6832_frontend_attach(struct dvb_usb_adapter *d)
+{
+   u8 obuf[3] = { 0xe, 0x83, 0 };
+   u8 ibuf[] = { 0 };
+
+
+   info(US6832: %s!\n, __func__);
+   
+   if (dvb_usb_generic_rw(d-dev, obuf, 3, ibuf, 1, 0)  0)
+   err(command 0x0e transfer failed.);
+
+   obuf[0] = 0xe;
+   obuf[1] = 0x83;
+   obuf[2] = 1;
+
+   if (dvb_usb_generic_rw(d-dev, obuf, 3, ibuf, 1, 0)  0)
+   err(command 0x0e transfer failed.);
+
+   obuf[0] = 0x51;
+
+   if (dvb_usb_generic_rw(d-dev, obuf, 1, ibuf, 1, 0)  0)
+   err(command 0x51 transfer failed.);
+
+   d-fe_adap[0].fe = dvb_attach(m88ds3103_attach, US6832_ds3103_config,
+   d-dev-i2c_adap);
+   if (d-fe_adap[0].fe ==