[media 2/7] add NXP tda2014x & Newport Media nm120/130/131 tuners

2016-02-15 Thread info
From: Буди Романто, AreMa Inc 

Signed-off-by: Буди Романто, AreMa Inc 
---
 drivers/media/tuners/Kconfig|  14 ++
 drivers/media/tuners/Makefile   |   2 +
 drivers/media/tuners/nm131.c| 272 ++
 drivers/media/tuners/nm131.h|  13 ++
 drivers/media/tuners/tda2014x.c | 356 
 drivers/media/tuners/tda2014x.h |  13 ++
 6 files changed, 670 insertions(+)
 create mode 100644 drivers/media/tuners/nm131.c
 create mode 100644 drivers/media/tuners/nm131.h
 create mode 100644 drivers/media/tuners/tda2014x.c
 create mode 100644 drivers/media/tuners/tda2014x.h

diff --git a/drivers/media/tuners/Kconfig b/drivers/media/tuners/Kconfig
index 05998f0..b044231 100644
--- a/drivers/media/tuners/Kconfig
+++ b/drivers/media/tuners/Kconfig
@@ -277,4 +277,18 @@ config MEDIA_TUNER_QM1D1C0042
default m if !MEDIA_SUBDRV_AUTOSELECT
help
  Sharp QM1D1C0042 trellis coded 8PSK tuner driver.
+
+config MEDIA_TUNER_NM131
+   tristate "Newport Media tuners NM131, NM130 and NM120"
+   depends on MEDIA_SUPPORT && I2C
+   default m if !MEDIA_SUBDRV_AUTOSELECT
+   help
+ Newport Media NM131, NM130 and NM120 tuner driver.
+
+config MEDIA_TUNER_TDA2014X
+   tristate "NXP Semiconductors TDA2014x tuner"
+   depends on MEDIA_SUPPORT && I2C
+   default m if !MEDIA_SUBDRV_AUTOSELECT
+   help
+ NXP Semiconductor TDA2014x tuner driver.
 endmenu
diff --git a/drivers/media/tuners/Makefile b/drivers/media/tuners/Makefile
index 06a9ab6..f527a51 100644
--- a/drivers/media/tuners/Makefile
+++ b/drivers/media/tuners/Makefile
@@ -41,6 +41,8 @@ obj-$(CONFIG_MEDIA_TUNER_R820T) += r820t.o
 obj-$(CONFIG_MEDIA_TUNER_MXL301RF) += mxl301rf.o
 obj-$(CONFIG_MEDIA_TUNER_QM1D1C0042) += qm1d1c0042.o
 obj-$(CONFIG_MEDIA_TUNER_M88RS6000T) += m88rs6000t.o
+obj-$(CONFIG_MEDIA_TUNER_NM131) += nm131.o
+obj-$(CONFIG_MEDIA_TUNER_TDA2014X) += tda2014x.o
 
 ccflags-y += -I$(srctree)/drivers/media/dvb-core
 ccflags-y += -I$(srctree)/drivers/media/dvb-frontends
diff --git a/drivers/media/tuners/nm131.c b/drivers/media/tuners/nm131.c
new file mode 100644
index 000..ae53544
--- /dev/null
+++ b/drivers/media/tuners/nm131.c
@@ -0,0 +1,272 @@
+/*
+ * Driver for Newport Media tuners NMI131, NMI130 and NMI120
+ *
+ * Copyright (C) Budi Rachmanto, AreMa Inc. 
+ */
+
+#include 
+#include "dvb_frontend.h"
+#include "nm131.h"
+
+struct nm131 {
+   struct i2c_adapter *i2c;
+};
+
+bool nm131_w(struct dvb_frontend *fe, u16 slvadr, u32 val, u32 sz)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8  buf[]   = {0xFE, 0xCE, slvadr >> 8, slvadr & 0xFF, 0, 0, 0, 0};
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = buf, .len = 
sz + 4,},
+   };
+
+   *(u32 *)(buf + 4) = slvadr == 0x36 ? val & 0x7F : val;
+   return i2c_transfer(t->i2c, msg, 1) == 1;
+}
+
+bool nm131_w8(struct dvb_frontend *fe, u8 slvadr, u8 dat)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8 buf[] = {slvadr, dat};
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = buf, .len = 
2,},
+   };
+   return i2c_transfer(t->i2c, msg, 1) == 1;
+}
+
+bool nm131_r(struct dvb_frontend *fe, u16 slvadr, u8 *dat, u32 sz)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8  rcmd[]  = {0xFE, 0xCF},
+   buf[sz];
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = rcmd,
.len = 2,},
+   {.addr = fe->id,.flags = I2C_M_RD,  .buf = buf, 
.len = sz,},
+   };
+   boolret = nm131_w(fe, slvadr, 0, 0) && i2c_transfer(t->i2c, msg, 2) 
== 2;
+
+   memcpy(dat, buf, sz);
+   return ret;
+}
+
+int nm131_tune(struct dvb_frontend *fe)
+{
+   struct vhf_filter_cutoff_codes_t {
+   u32 Hz;
+   u8  val8_0x08,
+   val8_0x09;
+   } const vhf_filter_cutoff_codes[] = {
+   {4500, 167, 58},{5500, 151, 57},{6500, 100, 
54},{7500, 83, 53}, {8500, 82, 53},
+   {9500, 65, 52}, {10500, 64, 52},{11500, 64, 
52},{12500, 0, 0}
+   };
+   const u8v45[]   = {0, 1, 2, 3, 4, 6, 9, 12},
+   ACI_audio_lut   = 0,
+   aci_lut = 1;
+   const u32   lo_freq_lut[]   = {0, 0, 43400, 23700, 
21400, 11800, 7900, 5300},
+   *v11,
+   adec_ddfs_fq= 126217,
+   ddfs_lut= 0;
+   u8  rf_reg_0x05 = 0x87,
+   v15,
+   val;
+   int i;
+   u32 tune_rf = fe->dtv_property_cache.frequency,
+   clk_off_f   = 

[media 2/7] add NXP tda2014x & Newport Media nm120/130/131 tuners

2016-02-15 Thread info
From: Буди Романто, AreMa Inc 

Signed-off-by: Буди Романто, AreMa Inc 
---
 drivers/media/tuners/Kconfig|  14 ++
 drivers/media/tuners/Makefile   |   2 +
 drivers/media/tuners/nm131.c| 272 ++
 drivers/media/tuners/nm131.h|  13 ++
 drivers/media/tuners/tda2014x.c | 356 
 drivers/media/tuners/tda2014x.h |  13 ++
 6 files changed, 670 insertions(+)
 create mode 100644 drivers/media/tuners/nm131.c
 create mode 100644 drivers/media/tuners/nm131.h
 create mode 100644 drivers/media/tuners/tda2014x.c
 create mode 100644 drivers/media/tuners/tda2014x.h

diff --git a/drivers/media/tuners/Kconfig b/drivers/media/tuners/Kconfig
index 05998f0..b044231 100644
--- a/drivers/media/tuners/Kconfig
+++ b/drivers/media/tuners/Kconfig
@@ -277,4 +277,18 @@ config MEDIA_TUNER_QM1D1C0042
default m if !MEDIA_SUBDRV_AUTOSELECT
help
  Sharp QM1D1C0042 trellis coded 8PSK tuner driver.
+
+config MEDIA_TUNER_NM131
+   tristate "Newport Media tuners NM131, NM130 and NM120"
+   depends on MEDIA_SUPPORT && I2C
+   default m if !MEDIA_SUBDRV_AUTOSELECT
+   help
+ Newport Media NM131, NM130 and NM120 tuner driver.
+
+config MEDIA_TUNER_TDA2014X
+   tristate "NXP Semiconductors TDA2014x tuner"
+   depends on MEDIA_SUPPORT && I2C
+   default m if !MEDIA_SUBDRV_AUTOSELECT
+   help
+ NXP Semiconductor TDA2014x tuner driver.
 endmenu
diff --git a/drivers/media/tuners/Makefile b/drivers/media/tuners/Makefile
index 06a9ab6..f527a51 100644
--- a/drivers/media/tuners/Makefile
+++ b/drivers/media/tuners/Makefile
@@ -41,6 +41,8 @@ obj-$(CONFIG_MEDIA_TUNER_R820T) += r820t.o
 obj-$(CONFIG_MEDIA_TUNER_MXL301RF) += mxl301rf.o
 obj-$(CONFIG_MEDIA_TUNER_QM1D1C0042) += qm1d1c0042.o
 obj-$(CONFIG_MEDIA_TUNER_M88RS6000T) += m88rs6000t.o
+obj-$(CONFIG_MEDIA_TUNER_NM131) += nm131.o
+obj-$(CONFIG_MEDIA_TUNER_TDA2014X) += tda2014x.o
 
 ccflags-y += -I$(srctree)/drivers/media/dvb-core
 ccflags-y += -I$(srctree)/drivers/media/dvb-frontends
diff --git a/drivers/media/tuners/nm131.c b/drivers/media/tuners/nm131.c
new file mode 100644
index 000..ae53544
--- /dev/null
+++ b/drivers/media/tuners/nm131.c
@@ -0,0 +1,272 @@
+/*
+ * Driver for Newport Media tuners NMI131, NMI130 and NMI120
+ *
+ * Copyright (C) Budi Rachmanto, AreMa Inc. 
+ */
+
+#include 
+#include "dvb_frontend.h"
+#include "nm131.h"
+
+struct nm131 {
+   struct i2c_adapter *i2c;
+};
+
+bool nm131_w(struct dvb_frontend *fe, u16 slvadr, u32 val, u32 sz)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8  buf[]   = {0xFE, 0xCE, slvadr >> 8, slvadr & 0xFF, 0, 0, 0, 0};
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = buf, .len = 
sz + 4,},
+   };
+
+   *(u32 *)(buf + 4) = slvadr == 0x36 ? val & 0x7F : val;
+   return i2c_transfer(t->i2c, msg, 1) == 1;
+}
+
+bool nm131_w8(struct dvb_frontend *fe, u8 slvadr, u8 dat)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8 buf[] = {slvadr, dat};
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = buf, .len = 
2,},
+   };
+   return i2c_transfer(t->i2c, msg, 1) == 1;
+}
+
+bool nm131_r(struct dvb_frontend *fe, u16 slvadr, u8 *dat, u32 sz)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8  rcmd[]  = {0xFE, 0xCF},
+   buf[sz];
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = rcmd,
.len = 2,},
+   {.addr = fe->id,.flags = I2C_M_RD,  .buf = buf, 
.len = sz,},
+   };
+   boolret = nm131_w(fe, slvadr, 0, 0) && i2c_transfer(t->i2c, msg, 2) 
== 2;
+
+   memcpy(dat, buf, sz);
+   return ret;
+}
+
+int nm131_tune(struct dvb_frontend *fe)
+{
+   struct vhf_filter_cutoff_codes_t {
+   u32 Hz;
+   u8  val8_0x08,
+   val8_0x09;
+   } const vhf_filter_cutoff_codes[] = {
+   {4500, 167, 58},{5500, 151, 57},{6500, 100, 
54},{7500, 83, 53}, {8500, 82, 53},
+   {9500, 65, 52}, {10500, 64, 52},{11500, 64, 
52},{12500, 0, 0}
+   };
+   const u8v45[]   = {0, 1, 2, 3, 4, 6, 9, 12},
+   ACI_audio_lut   = 0,
+   aci_lut = 1;
+   const u32   lo_freq_lut[]   = {0, 0, 43400, 23700, 
21400, 11800, 7900, 5300},
+   *v11,
+   adec_ddfs_fq= 126217,
+   ddfs_lut= 0;
+   u8  rf_reg_0x05 = 0x87,
+   v15,
+   val;
+   int i;
+   u32 tune_rf = fe->dtv_property_cache.frequency,
+   clk_off_f   = tune_rf,
+   xo  = 

[media 2/7] add NXP tda2014x & Newport Media nm120/130/131 tuners

2016-02-15 Thread info
From: Буди Романто, AreMa Inc 

Signed-off-by: Буди Романто, AreMa Inc 
---
 drivers/media/tuners/Kconfig|  14 ++
 drivers/media/tuners/Makefile   |   2 +
 drivers/media/tuners/nm131.c| 272 ++
 drivers/media/tuners/nm131.h|  13 ++
 drivers/media/tuners/tda2014x.c | 356 
 drivers/media/tuners/tda2014x.h |  13 ++
 6 files changed, 670 insertions(+)
 create mode 100644 drivers/media/tuners/nm131.c
 create mode 100644 drivers/media/tuners/nm131.h
 create mode 100644 drivers/media/tuners/tda2014x.c
 create mode 100644 drivers/media/tuners/tda2014x.h

diff --git a/drivers/media/tuners/Kconfig b/drivers/media/tuners/Kconfig
index 05998f0..b044231 100644
--- a/drivers/media/tuners/Kconfig
+++ b/drivers/media/tuners/Kconfig
@@ -277,4 +277,18 @@ config MEDIA_TUNER_QM1D1C0042
default m if !MEDIA_SUBDRV_AUTOSELECT
help
  Sharp QM1D1C0042 trellis coded 8PSK tuner driver.
+
+config MEDIA_TUNER_NM131
+   tristate "Newport Media tuners NM131, NM130 and NM120"
+   depends on MEDIA_SUPPORT && I2C
+   default m if !MEDIA_SUBDRV_AUTOSELECT
+   help
+ Newport Media NM131, NM130 and NM120 tuner driver.
+
+config MEDIA_TUNER_TDA2014X
+   tristate "NXP Semiconductors TDA2014x tuner"
+   depends on MEDIA_SUPPORT && I2C
+   default m if !MEDIA_SUBDRV_AUTOSELECT
+   help
+ NXP Semiconductor TDA2014x tuner driver.
 endmenu
diff --git a/drivers/media/tuners/Makefile b/drivers/media/tuners/Makefile
index 06a9ab6..f527a51 100644
--- a/drivers/media/tuners/Makefile
+++ b/drivers/media/tuners/Makefile
@@ -41,6 +41,8 @@ obj-$(CONFIG_MEDIA_TUNER_R820T) += r820t.o
 obj-$(CONFIG_MEDIA_TUNER_MXL301RF) += mxl301rf.o
 obj-$(CONFIG_MEDIA_TUNER_QM1D1C0042) += qm1d1c0042.o
 obj-$(CONFIG_MEDIA_TUNER_M88RS6000T) += m88rs6000t.o
+obj-$(CONFIG_MEDIA_TUNER_NM131) += nm131.o
+obj-$(CONFIG_MEDIA_TUNER_TDA2014X) += tda2014x.o
 
 ccflags-y += -I$(srctree)/drivers/media/dvb-core
 ccflags-y += -I$(srctree)/drivers/media/dvb-frontends
diff --git a/drivers/media/tuners/nm131.c b/drivers/media/tuners/nm131.c
new file mode 100644
index 000..ae53544
--- /dev/null
+++ b/drivers/media/tuners/nm131.c
@@ -0,0 +1,272 @@
+/*
+ * Driver for Newport Media tuners NMI131, NMI130 and NMI120
+ *
+ * Copyright (C) Budi Rachmanto, AreMa Inc. 
+ */
+
+#include 
+#include "dvb_frontend.h"
+#include "nm131.h"
+
+struct nm131 {
+   struct i2c_adapter *i2c;
+};
+
+bool nm131_w(struct dvb_frontend *fe, u16 slvadr, u32 val, u32 sz)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8  buf[]   = {0xFE, 0xCE, slvadr >> 8, slvadr & 0xFF, 0, 0, 0, 0};
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = buf, .len = 
sz + 4,},
+   };
+
+   *(u32 *)(buf + 4) = slvadr == 0x36 ? val & 0x7F : val;
+   return i2c_transfer(t->i2c, msg, 1) == 1;
+}
+
+bool nm131_w8(struct dvb_frontend *fe, u8 slvadr, u8 dat)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8 buf[] = {slvadr, dat};
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = buf, .len = 
2,},
+   };
+   return i2c_transfer(t->i2c, msg, 1) == 1;
+}
+
+bool nm131_r(struct dvb_frontend *fe, u16 slvadr, u8 *dat, u32 sz)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8  rcmd[]  = {0xFE, 0xCF},
+   buf[sz];
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = rcmd,
.len = 2,},
+   {.addr = fe->id,.flags = I2C_M_RD,  .buf = buf, 
.len = sz,},
+   };
+   boolret = nm131_w(fe, slvadr, 0, 0) && i2c_transfer(t->i2c, msg, 2) 
== 2;
+
+   memcpy(dat, buf, sz);
+   return ret;
+}
+
+int nm131_tune(struct dvb_frontend *fe)
+{
+   struct vhf_filter_cutoff_codes_t {
+   u32 Hz;
+   u8  val8_0x08,
+   val8_0x09;
+   } const vhf_filter_cutoff_codes[] = {
+   {4500, 167, 58},{5500, 151, 57},{6500, 100, 
54},{7500, 83, 53}, {8500, 82, 53},
+   {9500, 65, 52}, {10500, 64, 52},{11500, 64, 
52},{12500, 0, 0}
+   };
+   const u8v45[]   = {0, 1, 2, 3, 4, 6, 9, 12},
+   ACI_audio_lut   = 0,
+   aci_lut = 1;
+   const u32   lo_freq_lut[]   = {0, 0, 43400, 23700, 
21400, 11800, 7900, 5300},
+   *v11,
+   adec_ddfs_fq= 126217,
+   ddfs_lut= 0;
+   u8  rf_reg_0x05 = 0x87,
+   v15,
+   val;
+   int i;
+   u32 tune_rf = fe->dtv_property_cache.frequency,
+   clk_off_f   = 

[media 2/7] add NXP tda2014x & Newport Media nm120/130/131 tuners

2016-02-15 Thread info
From: Буди Романто, AreMa Inc 

Signed-off-by: Буди Романто, AreMa Inc 
---
 drivers/media/tuners/Kconfig|  14 ++
 drivers/media/tuners/Makefile   |   2 +
 drivers/media/tuners/nm131.c| 272 ++
 drivers/media/tuners/nm131.h|  13 ++
 drivers/media/tuners/tda2014x.c | 356 
 drivers/media/tuners/tda2014x.h |  13 ++
 6 files changed, 670 insertions(+)
 create mode 100644 drivers/media/tuners/nm131.c
 create mode 100644 drivers/media/tuners/nm131.h
 create mode 100644 drivers/media/tuners/tda2014x.c
 create mode 100644 drivers/media/tuners/tda2014x.h

diff --git a/drivers/media/tuners/Kconfig b/drivers/media/tuners/Kconfig
index 05998f0..b044231 100644
--- a/drivers/media/tuners/Kconfig
+++ b/drivers/media/tuners/Kconfig
@@ -277,4 +277,18 @@ config MEDIA_TUNER_QM1D1C0042
default m if !MEDIA_SUBDRV_AUTOSELECT
help
  Sharp QM1D1C0042 trellis coded 8PSK tuner driver.
+
+config MEDIA_TUNER_NM131
+   tristate "Newport Media tuners NM131, NM130 and NM120"
+   depends on MEDIA_SUPPORT && I2C
+   default m if !MEDIA_SUBDRV_AUTOSELECT
+   help
+ Newport Media NM131, NM130 and NM120 tuner driver.
+
+config MEDIA_TUNER_TDA2014X
+   tristate "NXP Semiconductors TDA2014x tuner"
+   depends on MEDIA_SUPPORT && I2C
+   default m if !MEDIA_SUBDRV_AUTOSELECT
+   help
+ NXP Semiconductor TDA2014x tuner driver.
 endmenu
diff --git a/drivers/media/tuners/Makefile b/drivers/media/tuners/Makefile
index 06a9ab6..f527a51 100644
--- a/drivers/media/tuners/Makefile
+++ b/drivers/media/tuners/Makefile
@@ -41,6 +41,8 @@ obj-$(CONFIG_MEDIA_TUNER_R820T) += r820t.o
 obj-$(CONFIG_MEDIA_TUNER_MXL301RF) += mxl301rf.o
 obj-$(CONFIG_MEDIA_TUNER_QM1D1C0042) += qm1d1c0042.o
 obj-$(CONFIG_MEDIA_TUNER_M88RS6000T) += m88rs6000t.o
+obj-$(CONFIG_MEDIA_TUNER_NM131) += nm131.o
+obj-$(CONFIG_MEDIA_TUNER_TDA2014X) += tda2014x.o
 
 ccflags-y += -I$(srctree)/drivers/media/dvb-core
 ccflags-y += -I$(srctree)/drivers/media/dvb-frontends
diff --git a/drivers/media/tuners/nm131.c b/drivers/media/tuners/nm131.c
new file mode 100644
index 000..ae53544
--- /dev/null
+++ b/drivers/media/tuners/nm131.c
@@ -0,0 +1,272 @@
+/*
+ * Driver for Newport Media tuners NMI131, NMI130 and NMI120
+ *
+ * Copyright (C) Budi Rachmanto, AreMa Inc. 
+ */
+
+#include 
+#include "dvb_frontend.h"
+#include "nm131.h"
+
+struct nm131 {
+   struct i2c_adapter *i2c;
+};
+
+bool nm131_w(struct dvb_frontend *fe, u16 slvadr, u32 val, u32 sz)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8  buf[]   = {0xFE, 0xCE, slvadr >> 8, slvadr & 0xFF, 0, 0, 0, 0};
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = buf, .len = 
sz + 4,},
+   };
+
+   *(u32 *)(buf + 4) = slvadr == 0x36 ? val & 0x7F : val;
+   return i2c_transfer(t->i2c, msg, 1) == 1;
+}
+
+bool nm131_w8(struct dvb_frontend *fe, u8 slvadr, u8 dat)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8 buf[] = {slvadr, dat};
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = buf, .len = 
2,},
+   };
+   return i2c_transfer(t->i2c, msg, 1) == 1;
+}
+
+bool nm131_r(struct dvb_frontend *fe, u16 slvadr, u8 *dat, u32 sz)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8  rcmd[]  = {0xFE, 0xCF},
+   buf[sz];
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = rcmd,
.len = 2,},
+   {.addr = fe->id,.flags = I2C_M_RD,  .buf = buf, 
.len = sz,},
+   };
+   boolret = nm131_w(fe, slvadr, 0, 0) && i2c_transfer(t->i2c, msg, 2) 
== 2;
+
+   memcpy(dat, buf, sz);
+   return ret;
+}
+
+int nm131_tune(struct dvb_frontend *fe)
+{
+   struct vhf_filter_cutoff_codes_t {
+   u32 Hz;
+   u8  val8_0x08,
+   val8_0x09;
+   } const vhf_filter_cutoff_codes[] = {
+   {4500, 167, 58},{5500, 151, 57},{6500, 100, 
54},{7500, 83, 53}, {8500, 82, 53},
+   {9500, 65, 52}, {10500, 64, 52},{11500, 64, 
52},{12500, 0, 0}
+   };
+   const u8v45[]   = {0, 1, 2, 3, 4, 6, 9, 12},
+   ACI_audio_lut   = 0,
+   aci_lut = 1;
+   const u32   lo_freq_lut[]   = {0, 0, 43400, 23700, 
21400, 11800, 7900, 5300},
+   *v11,
+   adec_ddfs_fq= 126217,
+   ddfs_lut= 0;
+   u8  rf_reg_0x05 = 0x87,
+   v15,
+   val;
+   int i;
+   u32 tune_rf = fe->dtv_property_cache.frequency,
+   clk_off_f   = tune_rf,
+   xo  = 

[media 2/7] add NXP tda2014x & Newport Media nm120/130/131 tuners

2016-02-14 Thread info
From: Буди Романто, AreMa Inc 

Signed-off-by: Буди Романто, AreMa Inc 
---
 drivers/media/tuners/Kconfig|  14 ++
 drivers/media/tuners/Makefile   |   2 +
 drivers/media/tuners/nm131.c| 272 ++
 drivers/media/tuners/nm131.h|  13 ++
 drivers/media/tuners/tda2014x.c | 356 
 drivers/media/tuners/tda2014x.h |  13 ++
 6 files changed, 670 insertions(+)
 create mode 100644 drivers/media/tuners/nm131.c
 create mode 100644 drivers/media/tuners/nm131.h
 create mode 100644 drivers/media/tuners/tda2014x.c
 create mode 100644 drivers/media/tuners/tda2014x.h

diff --git a/drivers/media/tuners/Kconfig b/drivers/media/tuners/Kconfig
index 05998f0..b044231 100644
--- a/drivers/media/tuners/Kconfig
+++ b/drivers/media/tuners/Kconfig
@@ -277,4 +277,18 @@ config MEDIA_TUNER_QM1D1C0042
default m if !MEDIA_SUBDRV_AUTOSELECT
help
  Sharp QM1D1C0042 trellis coded 8PSK tuner driver.
+
+config MEDIA_TUNER_NM131
+   tristate "Newport Media tuners NM131, NM130 and NM120"
+   depends on MEDIA_SUPPORT && I2C
+   default m if !MEDIA_SUBDRV_AUTOSELECT
+   help
+ Newport Media NM131, NM130 and NM120 tuner driver.
+
+config MEDIA_TUNER_TDA2014X
+   tristate "NXP Semiconductors TDA2014x tuner"
+   depends on MEDIA_SUPPORT && I2C
+   default m if !MEDIA_SUBDRV_AUTOSELECT
+   help
+ NXP Semiconductor TDA2014x tuner driver.
 endmenu
diff --git a/drivers/media/tuners/Makefile b/drivers/media/tuners/Makefile
index 06a9ab6..f527a51 100644
--- a/drivers/media/tuners/Makefile
+++ b/drivers/media/tuners/Makefile
@@ -41,6 +41,8 @@ obj-$(CONFIG_MEDIA_TUNER_R820T) += r820t.o
 obj-$(CONFIG_MEDIA_TUNER_MXL301RF) += mxl301rf.o
 obj-$(CONFIG_MEDIA_TUNER_QM1D1C0042) += qm1d1c0042.o
 obj-$(CONFIG_MEDIA_TUNER_M88RS6000T) += m88rs6000t.o
+obj-$(CONFIG_MEDIA_TUNER_NM131) += nm131.o
+obj-$(CONFIG_MEDIA_TUNER_TDA2014X) += tda2014x.o
 
 ccflags-y += -I$(srctree)/drivers/media/dvb-core
 ccflags-y += -I$(srctree)/drivers/media/dvb-frontends
diff --git a/drivers/media/tuners/nm131.c b/drivers/media/tuners/nm131.c
new file mode 100644
index 000..ae53544
--- /dev/null
+++ b/drivers/media/tuners/nm131.c
@@ -0,0 +1,272 @@
+/*
+ * Driver for Newport Media tuners NMI131, NMI130 and NMI120
+ *
+ * Copyright (C) Budi Rachmanto, AreMa Inc. 
+ */
+
+#include 
+#include "dvb_frontend.h"
+#include "nm131.h"
+
+struct nm131 {
+   struct i2c_adapter *i2c;
+};
+
+bool nm131_w(struct dvb_frontend *fe, u16 slvadr, u32 val, u32 sz)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8  buf[]   = {0xFE, 0xCE, slvadr >> 8, slvadr & 0xFF, 0, 0, 0, 0};
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = buf, .len = 
sz + 4,},
+   };
+
+   *(u32 *)(buf + 4) = slvadr == 0x36 ? val & 0x7F : val;
+   return i2c_transfer(t->i2c, msg, 1) == 1;
+}
+
+bool nm131_w8(struct dvb_frontend *fe, u8 slvadr, u8 dat)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8 buf[] = {slvadr, dat};
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = buf, .len = 
2,},
+   };
+   return i2c_transfer(t->i2c, msg, 1) == 1;
+}
+
+bool nm131_r(struct dvb_frontend *fe, u16 slvadr, u8 *dat, u32 sz)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8  rcmd[]  = {0xFE, 0xCF},
+   buf[sz];
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = rcmd,
.len = 2,},
+   {.addr = fe->id,.flags = I2C_M_RD,  .buf = buf, 
.len = sz,},
+   };
+   boolret = nm131_w(fe, slvadr, 0, 0) && i2c_transfer(t->i2c, msg, 2) 
== 2;
+
+   memcpy(dat, buf, sz);
+   return ret;
+}
+
+int nm131_tune(struct dvb_frontend *fe)
+{
+   struct vhf_filter_cutoff_codes_t {
+   u32 Hz;
+   u8  val8_0x08,
+   val8_0x09;
+   } const vhf_filter_cutoff_codes[] = {
+   {4500, 167, 58},{5500, 151, 57},{6500, 100, 
54},{7500, 83, 53}, {8500, 82, 53},
+   {9500, 65, 52}, {10500, 64, 52},{11500, 64, 
52},{12500, 0, 0}
+   };
+   const u8v45[]   = {0, 1, 2, 3, 4, 6, 9, 12},
+   ACI_audio_lut   = 0,
+   aci_lut = 1;
+   const u32   lo_freq_lut[]   = {0, 0, 43400, 23700, 
21400, 11800, 7900, 5300},
+   *v11,
+   adec_ddfs_fq= 126217,
+   ddfs_lut= 0;
+   u8  rf_reg_0x05 = 0x87,
+   v15,
+   val;
+   int i;
+   u32 tune_rf = fe->dtv_property_cache.frequency,
+   clk_off_f   = 

[media 2/7] add NXP tda2014x & Newport Media nm120/130/131 tuners

2016-02-14 Thread info
From: Буди Романто, AreMa Inc 

Signed-off-by: Буди Романто, AreMa Inc 
---
 drivers/media/tuners/Kconfig|  14 ++
 drivers/media/tuners/Makefile   |   2 +
 drivers/media/tuners/nm131.c| 272 ++
 drivers/media/tuners/nm131.h|  13 ++
 drivers/media/tuners/tda2014x.c | 356 
 drivers/media/tuners/tda2014x.h |  13 ++
 6 files changed, 670 insertions(+)
 create mode 100644 drivers/media/tuners/nm131.c
 create mode 100644 drivers/media/tuners/nm131.h
 create mode 100644 drivers/media/tuners/tda2014x.c
 create mode 100644 drivers/media/tuners/tda2014x.h

diff --git a/drivers/media/tuners/Kconfig b/drivers/media/tuners/Kconfig
index 05998f0..b044231 100644
--- a/drivers/media/tuners/Kconfig
+++ b/drivers/media/tuners/Kconfig
@@ -277,4 +277,18 @@ config MEDIA_TUNER_QM1D1C0042
default m if !MEDIA_SUBDRV_AUTOSELECT
help
  Sharp QM1D1C0042 trellis coded 8PSK tuner driver.
+
+config MEDIA_TUNER_NM131
+   tristate "Newport Media tuners NM131, NM130 and NM120"
+   depends on MEDIA_SUPPORT && I2C
+   default m if !MEDIA_SUBDRV_AUTOSELECT
+   help
+ Newport Media NM131, NM130 and NM120 tuner driver.
+
+config MEDIA_TUNER_TDA2014X
+   tristate "NXP Semiconductors TDA2014x tuner"
+   depends on MEDIA_SUPPORT && I2C
+   default m if !MEDIA_SUBDRV_AUTOSELECT
+   help
+ NXP Semiconductor TDA2014x tuner driver.
 endmenu
diff --git a/drivers/media/tuners/Makefile b/drivers/media/tuners/Makefile
index 06a9ab6..f527a51 100644
--- a/drivers/media/tuners/Makefile
+++ b/drivers/media/tuners/Makefile
@@ -41,6 +41,8 @@ obj-$(CONFIG_MEDIA_TUNER_R820T) += r820t.o
 obj-$(CONFIG_MEDIA_TUNER_MXL301RF) += mxl301rf.o
 obj-$(CONFIG_MEDIA_TUNER_QM1D1C0042) += qm1d1c0042.o
 obj-$(CONFIG_MEDIA_TUNER_M88RS6000T) += m88rs6000t.o
+obj-$(CONFIG_MEDIA_TUNER_NM131) += nm131.o
+obj-$(CONFIG_MEDIA_TUNER_TDA2014X) += tda2014x.o
 
 ccflags-y += -I$(srctree)/drivers/media/dvb-core
 ccflags-y += -I$(srctree)/drivers/media/dvb-frontends
diff --git a/drivers/media/tuners/nm131.c b/drivers/media/tuners/nm131.c
new file mode 100644
index 000..ae53544
--- /dev/null
+++ b/drivers/media/tuners/nm131.c
@@ -0,0 +1,272 @@
+/*
+ * Driver for Newport Media tuners NMI131, NMI130 and NMI120
+ *
+ * Copyright (C) Budi Rachmanto, AreMa Inc. 
+ */
+
+#include 
+#include "dvb_frontend.h"
+#include "nm131.h"
+
+struct nm131 {
+   struct i2c_adapter *i2c;
+};
+
+bool nm131_w(struct dvb_frontend *fe, u16 slvadr, u32 val, u32 sz)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8  buf[]   = {0xFE, 0xCE, slvadr >> 8, slvadr & 0xFF, 0, 0, 0, 0};
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = buf, .len = 
sz + 4,},
+   };
+
+   *(u32 *)(buf + 4) = slvadr == 0x36 ? val & 0x7F : val;
+   return i2c_transfer(t->i2c, msg, 1) == 1;
+}
+
+bool nm131_w8(struct dvb_frontend *fe, u8 slvadr, u8 dat)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8 buf[] = {slvadr, dat};
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = buf, .len = 
2,},
+   };
+   return i2c_transfer(t->i2c, msg, 1) == 1;
+}
+
+bool nm131_r(struct dvb_frontend *fe, u16 slvadr, u8 *dat, u32 sz)
+{
+   struct nm131 *t = fe->tuner_priv;
+   u8  rcmd[]  = {0xFE, 0xCF},
+   buf[sz];
+   struct i2c_msg msg[] = {
+   {.addr = fe->id,.flags = 0, .buf = rcmd,
.len = 2,},
+   {.addr = fe->id,.flags = I2C_M_RD,  .buf = buf, 
.len = sz,},
+   };
+   boolret = nm131_w(fe, slvadr, 0, 0) && i2c_transfer(t->i2c, msg, 2) 
== 2;
+
+   memcpy(dat, buf, sz);
+   return ret;
+}
+
+int nm131_tune(struct dvb_frontend *fe)
+{
+   struct vhf_filter_cutoff_codes_t {
+   u32 Hz;
+   u8  val8_0x08,
+   val8_0x09;
+   } const vhf_filter_cutoff_codes[] = {
+   {4500, 167, 58},{5500, 151, 57},{6500, 100, 
54},{7500, 83, 53}, {8500, 82, 53},
+   {9500, 65, 52}, {10500, 64, 52},{11500, 64, 
52},{12500, 0, 0}
+   };
+   const u8v45[]   = {0, 1, 2, 3, 4, 6, 9, 12},
+   ACI_audio_lut   = 0,
+   aci_lut = 1;
+   const u32   lo_freq_lut[]   = {0, 0, 43400, 23700, 
21400, 11800, 7900, 5300},
+   *v11,
+   adec_ddfs_fq= 126217,
+   ddfs_lut= 0;
+   u8  rf_reg_0x05 = 0x87,
+   v15,
+   val;
+   int i;
+   u32 tune_rf = fe->dtv_property_cache.frequency,
+   clk_off_f   = tune_rf,
+   xo  =