[media 2/7] add NXP tda2014x & Newport Media nm120/130/131 tuners
From: Буди Романто, AreMa IncSigned-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
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
From: Буди Романто, AreMa IncSigned-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
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
From: Буди Романто, AreMa IncSigned-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
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 =