Re: [PATCH 2/5] [media] ascot2e: Sony Ascot2e DVB-C/T/T2 tuner driver

2015-03-05 Thread Mauro Carvalho Chehab
Em Mon, 02 Feb 2015 12:22:32 +0300
Kozlov Sergey se...@netup.ru escreveu:

 
 DVB-T/T2/C frontend driver for Sony Ascot2e (CXD2861ER) chip.
 
 Signed-off-by: Kozlov Sergey se...@netup.ru
 ---
  MAINTAINERS   |9 +
  drivers/media/dvb-frontends/Kconfig   |7 +
  drivers/media/dvb-frontends/Makefile  |1 +
  drivers/media/dvb-frontends/ascot2e.c |  551 
 +
  drivers/media/dvb-frontends/ascot2e.h |   53 
  5 files changed, 621 insertions(+)
  create mode 100644 drivers/media/dvb-frontends/ascot2e.c
  create mode 100644 drivers/media/dvb-frontends/ascot2e.h
 
 diff --git a/MAINTAINERS b/MAINTAINERS
 index a3a1767..a022d6d 100644
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
 @@ -1613,6 +1613,15 @@ S: Maintained
  F:   Documentation/hwmon/asc7621
  F:   drivers/hwmon/asc7621.c
  
 +ASCOT2E MEDIA DRIVER

Not a big issue, but could you please rename it to:
MEDIA DRIVERS FOR ASCOT2E

We're trying to better organize the media entries at MAINTAINERS, at
least for the new drivers.

 +M:   Sergey Kozlov se...@netup.ru
 +L:   linux-media@vger.kernel.org
 +W:   http://linuxtv.org
 +W:   http://netup.tv/
 +T:   git git://linuxtv.org/media_tree.git
 +S:   Supported
 +F:   drivers/media/dvb-frontends/ascot2e*
 +
  ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS
  M:   Corentin Chary corentin.ch...@gmail.com
  L:   acpi4asus-u...@lists.sourceforge.net
 diff --git a/drivers/media/dvb-frontends/Kconfig 
 b/drivers/media/dvb-frontends/Kconfig
 index c2c157b..c94bb7b 100644
 --- a/drivers/media/dvb-frontends/Kconfig
 +++ b/drivers/media/dvb-frontends/Kconfig
 @@ -803,6 +803,13 @@ config DVB_HORUS3A
   help
 Say Y when you want to support this frontend.
  
 +config DVB_ASCOT2E
 + tristate Sony Ascot2E tuner
 + depends on DVB_CORE  I2C
 + default m if !MEDIA_SUBDRV_AUTOSELECT
 + help
 +   Say Y when you want to support this frontend.
 +
  comment Tools to develop new frontends
  
  config DVB_DUMMY_FE
 diff --git a/drivers/media/dvb-frontends/Makefile 
 b/drivers/media/dvb-frontends/Makefile
 index 3aa05f3..0b19c10 100644
 --- a/drivers/media/dvb-frontends/Makefile
 +++ b/drivers/media/dvb-frontends/Makefile
 @@ -117,3 +117,4 @@ obj-$(CONFIG_DVB_AF9033) += af9033.o
  obj-$(CONFIG_DVB_AS102_FE) += as102_fe.o
  obj-$(CONFIG_DVB_TC90522) += tc90522.o
  obj-$(CONFIG_DVB_HORUS3A) += horus3a.o
 +obj-$(CONFIG_DVB_ASCOT2E) += ascot2e.o
 diff --git a/drivers/media/dvb-frontends/ascot2e.c 
 b/drivers/media/dvb-frontends/ascot2e.c
 new file mode 100644
 index 000..d0bde8ea
 --- /dev/null
 +++ b/drivers/media/dvb-frontends/ascot2e.c
 @@ -0,0 +1,551 @@
 +/*
 + * ascot2e.c
 + *
 + * Sony Ascot3E DVB-T/T2/C/C2 tuner driver
 + *
 + * Copyright 2012 Sony Corporation
 + * Copyright (C) 2014 NetUP Inc.
 + * Copyright (C) 2014 Sergey Kozlov se...@netup.ru
 + * Copyright (C) 2014 Abylay Ospan aos...@netup.ru
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
 + * the Free Software Foundation; either version 2 of the License, or
 + * (at your option) any later version.
 + *
 + * This program is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 + * GNU General Public License for more details.
 +  */
 +
 +#include linux/slab.h
 +#include linux/module.h
 +#include linux/dvb/frontend.h
 +#include linux/types.h
 +#include ascot2e.h
 +#include dvb_frontend.h
 +
 +static int debug;
 +module_param(debug, int, 0644);
 +
 +#define dprintk(args...) \
 + do { \
 + if (debug) \
 + printk(args); \
 + } while (0)

Better to use dev_dbg(), as this allows to enable debug message line per line, 
via /sys/kernel/debug/dynamic_debug.

 +
 +enum ascot2e_state {
 + STATE_UNKNOWN,
 + STATE_SLEEP,
 + STATE_ACTIVE
 +};
 +
 +struct ascot2e_priv {
 + u32 frequency;
 + u8  i2c_address;
 + struct i2c_adapter  *i2c;
 + enum ascot2e_state  state;
 + void*set_tuner_data;
 + int (*set_tuner)(void *, int);
 +};
 +
 +enum ascot2e_tv_system_t {
 + ASCOT2E_DTV_DVBT_5,
 + ASCOT2E_DTV_DVBT_6,
 + ASCOT2E_DTV_DVBT_7,
 + ASCOT2E_DTV_DVBT_8,
 + ASCOT2E_DTV_DVBT2_1_7,
 + ASCOT2E_DTV_DVBT2_5,
 + ASCOT2E_DTV_DVBT2_6,
 + ASCOT2E_DTV_DVBT2_7,
 + ASCOT2E_DTV_DVBT2_8,
 + ASCOT2E_DTV_DVBC_6,
 + ASCOT2E_DTV_DVBC_8,
 + ASCOT2E_DTV_DVBC2_6,
 + ASCOT2E_DTV_DVBC2_8,
 + ASCOT2E_DTV_UNKNOWN
 +};
 +
 +struct ascot2e_band_sett {
 + u8  if_out_sel;
 + u8  agc_sel;
 + u8  mix_oll;
 + u8  rf_gain;
 + u8  if_bpf_gc;
 + u8  fif_offset;
 + u8  bw_offset;
 + u8  bw;
 + u8  rf_oldet;
 + 

[PATCH 2/5] [media] ascot2e: Sony Ascot2e DVB-C/T/T2 tuner driver

2015-02-02 Thread Kozlov Sergey

DVB-T/T2/C frontend driver for Sony Ascot2e (CXD2861ER) chip.

Signed-off-by: Kozlov Sergey se...@netup.ru
---
 MAINTAINERS   |9 +
 drivers/media/dvb-frontends/Kconfig   |7 +
 drivers/media/dvb-frontends/Makefile  |1 +
 drivers/media/dvb-frontends/ascot2e.c |  551 +
 drivers/media/dvb-frontends/ascot2e.h |   53 
 5 files changed, 621 insertions(+)
 create mode 100644 drivers/media/dvb-frontends/ascot2e.c
 create mode 100644 drivers/media/dvb-frontends/ascot2e.h

diff --git a/MAINTAINERS b/MAINTAINERS
index a3a1767..a022d6d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1613,6 +1613,15 @@ S:   Maintained
 F: Documentation/hwmon/asc7621
 F: drivers/hwmon/asc7621.c
 
+ASCOT2E MEDIA DRIVER
+M: Sergey Kozlov se...@netup.ru
+L: linux-media@vger.kernel.org
+W: http://linuxtv.org
+W: http://netup.tv/
+T: git git://linuxtv.org/media_tree.git
+S: Supported
+F: drivers/media/dvb-frontends/ascot2e*
+
 ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS
 M: Corentin Chary corentin.ch...@gmail.com
 L: acpi4asus-u...@lists.sourceforge.net
diff --git a/drivers/media/dvb-frontends/Kconfig 
b/drivers/media/dvb-frontends/Kconfig
index c2c157b..c94bb7b 100644
--- a/drivers/media/dvb-frontends/Kconfig
+++ b/drivers/media/dvb-frontends/Kconfig
@@ -803,6 +803,13 @@ config DVB_HORUS3A
help
  Say Y when you want to support this frontend.
 
+config DVB_ASCOT2E
+   tristate Sony Ascot2E tuner
+   depends on DVB_CORE  I2C
+   default m if !MEDIA_SUBDRV_AUTOSELECT
+   help
+ Say Y when you want to support this frontend.
+
 comment Tools to develop new frontends
 
 config DVB_DUMMY_FE
diff --git a/drivers/media/dvb-frontends/Makefile 
b/drivers/media/dvb-frontends/Makefile
index 3aa05f3..0b19c10 100644
--- a/drivers/media/dvb-frontends/Makefile
+++ b/drivers/media/dvb-frontends/Makefile
@@ -117,3 +117,4 @@ obj-$(CONFIG_DVB_AF9033) += af9033.o
 obj-$(CONFIG_DVB_AS102_FE) += as102_fe.o
 obj-$(CONFIG_DVB_TC90522) += tc90522.o
 obj-$(CONFIG_DVB_HORUS3A) += horus3a.o
+obj-$(CONFIG_DVB_ASCOT2E) += ascot2e.o
diff --git a/drivers/media/dvb-frontends/ascot2e.c 
b/drivers/media/dvb-frontends/ascot2e.c
new file mode 100644
index 000..d0bde8ea
--- /dev/null
+++ b/drivers/media/dvb-frontends/ascot2e.c
@@ -0,0 +1,551 @@
+/*
+ * ascot2e.c
+ *
+ * Sony Ascot3E DVB-T/T2/C/C2 tuner driver
+ *
+ * Copyright 2012 Sony Corporation
+ * Copyright (C) 2014 NetUP Inc.
+ * Copyright (C) 2014 Sergey Kozlov se...@netup.ru
+ * Copyright (C) 2014 Abylay Ospan aos...@netup.ru
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+  */
+
+#include linux/slab.h
+#include linux/module.h
+#include linux/dvb/frontend.h
+#include linux/types.h
+#include ascot2e.h
+#include dvb_frontend.h
+
+static int debug;
+module_param(debug, int, 0644);
+
+#define dprintk(args...) \
+   do { \
+   if (debug) \
+   printk(args); \
+   } while (0)
+
+enum ascot2e_state {
+   STATE_UNKNOWN,
+   STATE_SLEEP,
+   STATE_ACTIVE
+};
+
+struct ascot2e_priv {
+   u32 frequency;
+   u8  i2c_address;
+   struct i2c_adapter  *i2c;
+   enum ascot2e_state  state;
+   void*set_tuner_data;
+   int (*set_tuner)(void *, int);
+};
+
+enum ascot2e_tv_system_t {
+   ASCOT2E_DTV_DVBT_5,
+   ASCOT2E_DTV_DVBT_6,
+   ASCOT2E_DTV_DVBT_7,
+   ASCOT2E_DTV_DVBT_8,
+   ASCOT2E_DTV_DVBT2_1_7,
+   ASCOT2E_DTV_DVBT2_5,
+   ASCOT2E_DTV_DVBT2_6,
+   ASCOT2E_DTV_DVBT2_7,
+   ASCOT2E_DTV_DVBT2_8,
+   ASCOT2E_DTV_DVBC_6,
+   ASCOT2E_DTV_DVBC_8,
+   ASCOT2E_DTV_DVBC2_6,
+   ASCOT2E_DTV_DVBC2_8,
+   ASCOT2E_DTV_UNKNOWN
+};
+
+struct ascot2e_band_sett {
+   u8  if_out_sel;
+   u8  agc_sel;
+   u8  mix_oll;
+   u8  rf_gain;
+   u8  if_bpf_gc;
+   u8  fif_offset;
+   u8  bw_offset;
+   u8  bw;
+   u8  rf_oldet;
+   u8  if_bpf_f0;
+};
+
+#define ASCOT2E_AUTO   0xff
+#define ASCOT2E_OFFSET(ofs)((u8)(ofs)  0x1F)
+#define ASCOT2E_BW_6   0x00
+#define ASCOT2E_BW_7   0x01
+#define ASCOT2E_BW_8   0x02
+#define ASCOT2E_BW_1_7 0x03
+
+static struct ascot2e_band_sett ascot2e_sett[] = {
+   { ASCOT2E_AUTO, ASCOT2E_AUTO, 0x03, ASCOT2E_AUTO, 0x06,
+ ASCOT2E_OFFSET(-8),