mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
atv_demod: modify atv demod support multi tuner load [1/3]
PD#TV-1539 Problem: modify atv demod support multi tuner load. Solution: 1.add fine tune. 2.add set/get if info. 3.add tuner type set/get. 4.add multi tuner config in dts. 5.atv demod ver: V2.09. Verify: verified by x301 Change-Id: I23328bfab3d3508db67cef3e327002563eb1a87e Signed-off-by: nengwen.chen <nengwen.chen@amlogic.com>
This commit is contained in:
@@ -538,15 +538,17 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c0>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
tuner_xtal = <1>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode = <3>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "mxl661_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c0>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
tuner_xtal_0 = <1>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode_0 = <3>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* SLAVE_XTAL_SHARE(3)
|
||||
*/
|
||||
tuner_xtal_cap = <25>; /* when tuner_xtal_mode = 3, set 25 */
|
||||
tuner_xtal_cap_0 = <25>; /* when tuner_xtal_mode = 3, set 25 */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -875,15 +875,17 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c0>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
tuner_xtal = <1>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode = <3>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "mxl661_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c0>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
tuner_xtal_0 = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode_0 = <0>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* SLAVE_XTAL_SHARE(3)
|
||||
*/
|
||||
tuner_xtal_cap = <25>; /* when tuner_xtal_mode = 3, set 25 */
|
||||
tuner_xtal_cap_0 = <25>; /* when tuner_xtal_mode = 3, set 25 */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -1130,15 +1130,17 @@
|
||||
|
||||
tuner: tuner {
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c0>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
tuner_xtal = <1>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode = <3>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "r842_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c0>;
|
||||
tuner_i2c_addr_0 = <0xf6>;
|
||||
tuner_xtal_0 = <1>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode_0 = <0>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* SLAVE_XTAL_SHARE(3)
|
||||
*/
|
||||
tuner_xtal_cap = <25>; /* when tuner_xtal_mode = 3, set 25 */
|
||||
tuner_xtal_cap_0 = <38>; /* when tuner_xtal_mode = 3, set 25 */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -879,15 +879,17 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c0>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
tuner_xtal = <1>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode = <3>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "mxl661_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c0>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
tuner_xtal_0 = <1>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode_0 = <3>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* SLAVE_XTAL_SHARE(3)
|
||||
*/
|
||||
tuner_xtal_cap = <25>; /* when tuner_xtal_mode = 3, set 25 */
|
||||
tuner_xtal_cap_0 = <25>; /* when tuner_xtal_mode = 3, set 25 */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -438,17 +438,19 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0xf6>;
|
||||
tuner_xtal = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode = <3>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "r842_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0xf6>;
|
||||
tuner_xtal_0 = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode_0 = <3>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* MASTER_TO_SLAVE_XTAL_IN(1)
|
||||
* MASTER_TO_SLAVE_XTAL_OUT(2)
|
||||
* SLAVE_XTAL_OUT(3)
|
||||
*/
|
||||
tuner_xtal_cap = <0>; /* 0 ~ 41 (pf) */
|
||||
tuner_xtal_cap_0 = <0>; /* 0 ~ 41 (pf) */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -439,17 +439,19 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0xf6>;
|
||||
tuner_xtal = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode = <3>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "r842_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0xf6>;
|
||||
tuner_xtal_0 = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode_0 = <3>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* MASTER_TO_SLAVE_XTAL_IN(1)
|
||||
* MASTER_TO_SLAVE_XTAL_OUT(2)
|
||||
* SLAVE_XTAL_OUT(3)
|
||||
*/
|
||||
tuner_xtal_cap = <0>; /* 0 ~ 41 (pf) */
|
||||
tuner_xtal_cap_0 = <0>; /* 0 ~ 41 (pf) */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -429,12 +429,14 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "si2151_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
/* tuner_xtal = <0>; */ /* unuse for si2151 */
|
||||
/* tuner_xtal_mode = <0>; */
|
||||
/* tuner_xtal_cap = <0>; */
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "si2151_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
/* tuner_xtal_0 = <0>; */ /* unuse for si2151 */
|
||||
/* tuner_xtal_mode_0 = <0>; */
|
||||
/* tuner_xtal_cap_0 = <0>; */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -434,17 +434,19 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0xf6>;
|
||||
tuner_xtal = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode = <0>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "r842_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0xf6>;
|
||||
tuner_xtal_0 = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode_0 = <0>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* MASTER_TO_SLAVE_XTAL_IN(1)
|
||||
* MASTER_TO_SLAVE_XTAL_OUT(2)
|
||||
* SLAVE_XTAL_OUT(3)
|
||||
*/
|
||||
tuner_xtal_cap = <38>; /* 0 ~ 41 (pf) */
|
||||
tuner_xtal_cap_0 = <38>; /* 0 ~ 41 (pf) */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -434,17 +434,19 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0xf6>;
|
||||
tuner_xtal = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode = <0>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "r842_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0xf6>;
|
||||
tuner_xtal_0 = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode_0 = <0>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* MASTER_TO_SLAVE_XTAL_IN(1)
|
||||
* MASTER_TO_SLAVE_XTAL_OUT(2)
|
||||
* SLAVE_XTAL_OUT(3)
|
||||
*/
|
||||
tuner_xtal_cap = <38>; /* 0 ~ 41 (pf) */
|
||||
tuner_xtal_cap_0 = <38>; /* 0 ~ 41 (pf) */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -628,12 +628,14 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "si2151_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
/* tuner_xtal = <0>; */ /* unuse for si2151 */
|
||||
/* tuner_xtal_mode = <0>; */
|
||||
/* tuner_xtal_cap = <0>; */
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "si2151_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
/* tuner_xtal_0 = <0>; */ /* unuse for si2151 */
|
||||
/* tuner_xtal_mode_0 = <0>; */
|
||||
/* tuner_xtal_cap_0 = <0>; */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -672,12 +672,14 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "si2151_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
/* tuner_xtal = <0>; */ /* unuse for si2151 */
|
||||
/* tuner_xtal_mode = <0>; */
|
||||
/* tuner_xtal_cap = <0>; */
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "si2151_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
/* tuner_xtal_0 = <0>; */ /* unuse for si2151 */
|
||||
/* tuner_xtal_mode_0 = <0>; */
|
||||
/* tuner_xtal_cap_0 = <0>; */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -631,15 +631,17 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
tuner_xtal = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode = <0>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "mxl661_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
tuner_xtal_0 = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode_0 = <0>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* SLAVE_XTAL_SHARE(1)
|
||||
*/
|
||||
tuner_xtal_cap = <30>; /* when tuner_xtal_mode = 1, set 25 */
|
||||
tuner_xtal_cap_0 = <30>; /* when tuner_xtal_mode = 1, set 25 */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -627,15 +627,17 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
tuner_xtal = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode = <0>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "mxl661_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
tuner_xtal_0 = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode_0 = <0>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* SLAVE_XTAL_SHARE(1)
|
||||
*/
|
||||
tuner_xtal_cap = <30>; /* when tuner_xtal_mode = 1, set 25 */
|
||||
tuner_xtal_cap_0 = <30>; /* when tuner_xtal_mode = 1, set 25 */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -633,16 +633,18 @@
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
tuner_xtal = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode = <0>;
|
||||
status = "disabled";
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "mxl661_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
tuner_xtal_0 = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode_0 = <0>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* SLAVE_XTAL_SHARE(1)
|
||||
*/
|
||||
tuner_xtal_cap = <30>; /* when tuner_xtal_mode = 1, set 25 */
|
||||
tuner_xtal_cap_0 = <30>; /* when tuner_xtal_mode = 1, set 25 */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -438,17 +438,19 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0xf6>;
|
||||
tuner_xtal = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode = <3>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "r842_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0xf6>;
|
||||
tuner_xtal_0 = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode_0 = <3>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* MASTER_TO_SLAVE_XTAL_IN(1)
|
||||
* MASTER_TO_SLAVE_XTAL_OUT(2)
|
||||
* SLAVE_XTAL_OUT(3)
|
||||
*/
|
||||
tuner_xtal_cap = <0>; /* 0 ~ 41 (pf) */
|
||||
tuner_xtal_cap_0 = <0>; /* 0 ~ 41 (pf) */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -438,17 +438,19 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0xf6>;
|
||||
tuner_xtal = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode = <3>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "r842_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0xf6>;
|
||||
tuner_xtal_0 = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode_0 = <3>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* MASTER_TO_SLAVE_XTAL_IN(1)
|
||||
* MASTER_TO_SLAVE_XTAL_OUT(2)
|
||||
* SLAVE_XTAL_OUT(3)
|
||||
*/
|
||||
tuner_xtal_cap = <0>; /* 0 ~ 41 (pf) */
|
||||
tuner_xtal_cap_0 = <0>; /* 0 ~ 41 (pf) */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -429,12 +429,14 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "si2151_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
/* tuner_xtal = <0>; */ /* unuse for si2151 */
|
||||
/* tuner_xtal_mode = <0>; */
|
||||
/* tuner_xtal_cap = <0>; */
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "si2151_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
/* tuner_xtal_0 = <0>; */ /* unuse for si2151 */
|
||||
/* tuner_xtal_mode_0 = <0>; */
|
||||
/* tuner_xtal_cap_0 = <0>; */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -426,17 +426,19 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0xf6>;
|
||||
tuner_xtal = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode = <0>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "r842_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0xf6>;
|
||||
tuner_xtal_0 = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode_0 = <0>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* MASTER_TO_SLAVE_XTAL_IN(1)
|
||||
* MASTER_TO_SLAVE_XTAL_OUT(2)
|
||||
* SLAVE_XTAL_OUT(3)
|
||||
*/
|
||||
tuner_xtal_cap = <38>; /* 0 ~ 41 (pf) */
|
||||
tuner_xtal_cap_0 = <38>; /* 0 ~ 41 (pf) */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -426,17 +426,19 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0xf6>;
|
||||
tuner_xtal = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode = <0>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "r842_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0xf6>;
|
||||
tuner_xtal_0 = <1>; /* 0: 16MHz, 1: 24MHz, 3: 27MHz */
|
||||
tuner_xtal_mode_0 = <0>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* MASTER_TO_SLAVE_XTAL_IN(1)
|
||||
* MASTER_TO_SLAVE_XTAL_OUT(2)
|
||||
* SLAVE_XTAL_OUT(3)
|
||||
*/
|
||||
tuner_xtal_cap = <38>; /* 0 ~ 41 (pf) */
|
||||
tuner_xtal_cap_0 = <38>; /* 0 ~ 41 (pf) */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -627,12 +627,14 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "si2151_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
/* tuner_xtal = <0>; */ /* unuse for si2151 */
|
||||
/* tuner_xtal_mode = <0>; */
|
||||
/* tuner_xtal_cap = <0>; */
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "si2151_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
/* tuner_xtal_0 = <0>; */ /* unuse for si2151 */
|
||||
/* tuner_xtal_mode_0 = <0>; */
|
||||
/* tuner_xtal_cap_0 = <0>; */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -671,12 +671,14 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "si2151_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
/* tuner_xtal = <0>; */ /* unuse for si2151 */
|
||||
/* tuner_xtal_mode = <0>; */
|
||||
/* tuner_xtal_cap = <0>; */
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "si2151_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
/* tuner_xtal_0 = <0>; */ /* unuse for si2151 */
|
||||
/* tuner_xtal_mode_0 = <0>; */
|
||||
/* tuner_xtal_cap_0 = <0>; */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -628,15 +628,17 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
tuner_xtal = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode = <0>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "mxl661_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
tuner_xtal_0 = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode_0 = <0>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* SLAVE_XTAL_SHARE(1)
|
||||
*/
|
||||
tuner_xtal_cap = <30>; /* when tuner_xtal_mode = 1, set 25 */
|
||||
tuner_xtal_cap_0 = <30>; /* when tuner_xtal_mode = 1, set 25 */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -628,15 +628,17 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
tuner_xtal = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode = <0>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "mxl661_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
tuner_xtal_0 = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode_0 = <0>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* SLAVE_XTAL_SHARE(1)
|
||||
*/
|
||||
tuner_xtal_cap = <30>; /* when tuner_xtal_mode = 1, set 25 */
|
||||
tuner_xtal_cap_0 = <30>; /* when tuner_xtal_mode = 1, set 25 */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -627,15 +627,17 @@
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
tuner_xtal = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode = <0>;
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "mxl661_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
tuner_xtal_0 = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode_0 = <0>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* SLAVE_XTAL_SHARE(1)
|
||||
*/
|
||||
tuner_xtal_cap = <30>; /* when tuner_xtal_mode = 1, set 25 */
|
||||
tuner_xtal_cap_0 = <30>; /* when tuner_xtal_mode = 1, set 25 */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -628,16 +628,18 @@
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
tuner_xtal = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode = <0>;
|
||||
status = "disabled";
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "mxl661_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
tuner_xtal_0 = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode_0 = <0>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* SLAVE_XTAL_SHARE(1)
|
||||
*/
|
||||
tuner_xtal_cap = <30>; /* when tuner_xtal_mode = 1, set 25 */
|
||||
tuner_xtal_cap_0 = <30>; /* when tuner_xtal_mode = 1, set 25 */
|
||||
};
|
||||
|
||||
atv-demod {
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
#include "atvauddemod_func.h"
|
||||
|
||||
|
||||
#define AMLATVDEMOD_VER "V2.08"
|
||||
#define AMLATVDEMOD_VER "V2.09"
|
||||
|
||||
struct aml_atvdemod_device *amlatvdemod_devp;
|
||||
|
||||
@@ -66,7 +66,7 @@ static ssize_t aml_atvdemod_store(struct class *class,
|
||||
unsigned long tmp = 0, data = 0;
|
||||
struct aml_atvdemod_device *dev =
|
||||
container_of(class, struct aml_atvdemod_device, cls);
|
||||
struct atv_demod_priv *priv = dev->v4l2_fe.fe.analog_demod_priv;
|
||||
/*struct atv_demod_priv *priv = dev->v4l2_fe.fe.analog_demod_priv;*/
|
||||
|
||||
buf_orig = kstrdup(buf, GFP_KERNEL);
|
||||
ps = buf_orig;
|
||||
@@ -82,11 +82,12 @@ static ssize_t aml_atvdemod_store(struct class *class,
|
||||
|
||||
if (parm[0] == NULL)
|
||||
goto EXIT;
|
||||
|
||||
#if 0
|
||||
if (priv->state != ATVDEMOD_STATE_WORK) {
|
||||
pr_info("atvdemod_state not work ....\n");
|
||||
goto EXIT;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!strncmp(parm[0], "init", 4)) {
|
||||
ret = atv_demod_enter_mode(&dev->v4l2_fe.fe);
|
||||
@@ -274,6 +275,7 @@ static ssize_t aml_atvdemod_store(struct class *class,
|
||||
struct analog_parameters params;
|
||||
struct v4l2_analog_parameters *p = NULL;
|
||||
unsigned int std = 0;
|
||||
unsigned int freq = 0;
|
||||
|
||||
fe = &dev->v4l2_fe.fe;
|
||||
p = &dev->v4l2_fe.params;
|
||||
@@ -283,7 +285,12 @@ static ssize_t aml_atvdemod_store(struct class *class,
|
||||
else
|
||||
std = p->std;
|
||||
|
||||
params.frequency = p->frequency;
|
||||
if (parm[2] && kstrtoul(parm[2], 0, &tmp) == 0)
|
||||
freq = tmp;
|
||||
else
|
||||
freq = p->frequency;
|
||||
|
||||
params.frequency = freq;
|
||||
params.mode = p->afc_range;
|
||||
params.audmode = p->audmode;
|
||||
params.std = std;
|
||||
@@ -313,11 +320,40 @@ static ssize_t aml_atvdemod_store(struct class *class,
|
||||
v4l2_std_to_str((0xffffff & dev->std)));
|
||||
pr_info("[atvdemod] audmode: 0x%x\n", dev->audmode);
|
||||
pr_info("[atvdemod] flag: %d\n", p->flag);
|
||||
pr_info("[atvdemod] tuner_id: %d\n", dev->tuner_id);
|
||||
pr_info("[atvdemod] tuner_cur: %d\n", dev->tuner_cur);
|
||||
pr_info("[atvdemod] tuner_id: %d\n",
|
||||
dev->tuners[dev->tuner_cur].cfg.id);
|
||||
pr_info("[atvdemod] if_freq: %d\n", dev->if_freq);
|
||||
pr_info("[atvdemod] if_inv: %d\n", dev->if_inv);
|
||||
pr_info("[atvdemod] fre_offset: %d\n", dev->fre_offset);
|
||||
pr_info("[atvdemod] version: %s.\n", AMLATVDEMOD_VER);
|
||||
} else if (!strncmp(parm[0], "attach_tuner", 12)) {
|
||||
int tuner_id = 0;
|
||||
|
||||
if (parm[1] && kstrtoul(parm[1], 10, &tmp) == 0) {
|
||||
val = tmp;
|
||||
|
||||
for (i = 0; i < dev->tuner_num; ++i) {
|
||||
if (dev->tuners[i].cfg.id == val) {
|
||||
tuner_id = dev->tuners[i].cfg.id;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (tuner_id == 0 || dev->tuner_cur == i) {
|
||||
pr_err("%s: set nonsupport or the same tuner %d.\n",
|
||||
__func__, val);
|
||||
goto EXIT;
|
||||
}
|
||||
|
||||
dev->tuner_cur = i;
|
||||
|
||||
ret = aml_attach_tuner(dev);
|
||||
if (ret)
|
||||
pr_info("attach_tuner error.\n");
|
||||
else
|
||||
pr_info("attach_tuner %d done.\n", tuner_id);
|
||||
}
|
||||
} else
|
||||
pr_dbg("invalid command\n");
|
||||
|
||||
@@ -353,7 +389,9 @@ static void aml_atvdemod_dt_parse(struct aml_atvdemod_device *pdev)
|
||||
struct device_node *node_i2c = NULL;
|
||||
unsigned int val = 0;
|
||||
const char *str = NULL;
|
||||
char buf[20] = { 0 };
|
||||
int ret = 0;
|
||||
int i = 0;
|
||||
|
||||
node = pdev->dev->of_node;
|
||||
if (node == NULL) {
|
||||
@@ -385,8 +423,7 @@ static void aml_atvdemod_dt_parse(struct aml_atvdemod_device *pdev)
|
||||
pdev->agc_pin = NULL;
|
||||
pr_err("can't find agc pinmux.\n");
|
||||
} else {
|
||||
pr_err("atvdemod agc pinmux name: %s\n",
|
||||
pdev->pin_name);
|
||||
pr_err("atvdemod agc pinmux name: %s\n", pdev->pin_name);
|
||||
}
|
||||
|
||||
ret = of_property_read_u32(node, "btsc_sap_mode", &val);
|
||||
@@ -397,119 +434,176 @@ static void aml_atvdemod_dt_parse(struct aml_atvdemod_device *pdev)
|
||||
|
||||
/* get tuner config node */
|
||||
node_tuner = of_parse_phandle(node, "tuner", 0);
|
||||
if (node_tuner) {
|
||||
ret = of_property_read_string(node_tuner, "tuner_name", &str);
|
||||
if (ret)
|
||||
pr_err("can't find tuner.\n");
|
||||
else {
|
||||
if (!strncmp(str, "mxl661_tuner", 12))
|
||||
pdev->tuner_id = AM_TUNER_MXL661;
|
||||
else if (!strncmp(str, "si2151_tuner", 12))
|
||||
pdev->tuner_id = AM_TUNER_SI2151;
|
||||
else if (!strncmp(str, "si2159_tuner", 12))
|
||||
pdev->tuner_id = AM_TUNER_SI2159;
|
||||
else if (!strncmp(str, "r840_tuner", 10))
|
||||
pdev->tuner_id = AM_TUNER_R840;
|
||||
else if (!strncmp(str, "r842_tuner", 10))
|
||||
pdev->tuner_id = AM_TUNER_R842;
|
||||
else
|
||||
pr_err("nonsupport tuner: %s.\n", str);
|
||||
if (!node_tuner) {
|
||||
pr_err("can't find tuner node.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ret = of_property_read_u32(node_tuner, "tuner_num", &val);
|
||||
if (ret == 0)
|
||||
pdev->tuner_num = val;
|
||||
else {
|
||||
pr_err("can't find tuner_num.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
pdev->tuners = kcalloc(pdev->tuner_num, sizeof(struct aml_tuner),
|
||||
GFP_KERNEL);
|
||||
if (!pdev->tuners) {
|
||||
/* pr_err("can't kcalloc for tuners.\n"); */
|
||||
return;
|
||||
}
|
||||
|
||||
ret = of_property_read_u32(node_tuner, "tuner_cur", &val);
|
||||
if (ret) {
|
||||
pr_err("can't find tuner_cur, use default 0.\n");
|
||||
pdev->tuner_cur = -1;
|
||||
} else
|
||||
pdev->tuner_cur = val;
|
||||
|
||||
for (i = 0; i < pdev->tuner_num; ++i) {
|
||||
snprintf(buf, sizeof(buf), "tuner_name_%d", i);
|
||||
ret = of_property_read_string(node_tuner, buf, &str);
|
||||
if (ret) {
|
||||
pr_err("can't find tuner %d.\n", i);
|
||||
continue;
|
||||
}
|
||||
|
||||
node_i2c = of_parse_phandle(node_tuner, "tuner_i2c_adap", 0);
|
||||
if (!strncmp(str, "mxl661_tuner", 12))
|
||||
pdev->tuners[i].cfg.id = AM_TUNER_MXL661;
|
||||
else if (!strncmp(str, "si2151_tuner", 12))
|
||||
pdev->tuners[i].cfg.id = AM_TUNER_SI2151;
|
||||
else if (!strncmp(str, "si2159_tuner", 12))
|
||||
pdev->tuners[i].cfg.id = AM_TUNER_SI2159;
|
||||
else if (!strncmp(str, "r840_tuner", 10))
|
||||
pdev->tuners[i].cfg.id = AM_TUNER_R840;
|
||||
else if (!strncmp(str, "r842_tuner", 10))
|
||||
pdev->tuners[i].cfg.id = AM_TUNER_R842;
|
||||
else {
|
||||
pr_err("can't support tuner: %s.\n", str);
|
||||
pdev->tuners[i].cfg.id = AM_TUNER_NONE;
|
||||
}
|
||||
|
||||
snprintf(buf, sizeof(buf), "tuner_i2c_adap_%d", i);
|
||||
node_i2c = of_parse_phandle(node_tuner, buf, 0);
|
||||
if (node_i2c) {
|
||||
pdev->i2c_adp = of_find_i2c_adapter_by_node(node_i2c);
|
||||
pdev->tuners[i].i2c_adp =
|
||||
of_find_i2c_adapter_by_node(node_i2c);
|
||||
of_node_put(node_i2c);
|
||||
|
||||
if (!pdev->i2c_adp)
|
||||
if (!pdev->tuners[i].i2c_adp)
|
||||
pr_err("can't find tuner_i2c_adap.\n");
|
||||
}
|
||||
|
||||
ret = of_property_read_u32(node_tuner, "tuner_i2c_addr", &val);
|
||||
snprintf(buf, sizeof(buf), "tuner_i2c_addr_%d", i);
|
||||
ret = of_property_read_u32(node_tuner, buf, &val);
|
||||
if (ret)
|
||||
pr_err("can't find tuner_i2c_addr.\n");
|
||||
else
|
||||
pdev->i2c_addr = val;
|
||||
pdev->tuners[i].cfg.i2c_addr = val;
|
||||
|
||||
ret = of_property_read_u32(node_tuner, "tuner_xtal", &val);
|
||||
snprintf(buf, sizeof(buf), "tuner_xtal_%d", i);
|
||||
ret = of_property_read_u32(node_tuner, buf, &val);
|
||||
if (ret)
|
||||
pr_err("can't find tuner_xtal.\n");
|
||||
else
|
||||
pdev->tuner_xtal = val;
|
||||
pdev->tuners[i].cfg.xtal = val;
|
||||
|
||||
ret = of_property_read_u32(node_tuner, "tuner_xtal_mode", &val);
|
||||
snprintf(buf, sizeof(buf), "tuner_xtal_mode_%d", i);
|
||||
ret = of_property_read_u32(node_tuner, buf, &val);
|
||||
if (ret)
|
||||
pr_err("can't find tuner_xtal_mode.\n");
|
||||
else
|
||||
pdev->tuner_xtal_mode = val;
|
||||
pdev->tuners[i].cfg.xtal_mode = val;
|
||||
|
||||
ret = of_property_read_u32(node_tuner, "tuner_xtal_cap", &val);
|
||||
snprintf(buf, sizeof(buf), "tuner_xtal_cap_%d", i);
|
||||
ret = of_property_read_u32(node_tuner, buf, &val);
|
||||
if (ret)
|
||||
pr_err("can't find tuner_xtal_cap.\n");
|
||||
else
|
||||
pdev->tuner_xtal_cap = val;
|
||||
pdev->tuners[i].cfg.xtal_cap = val;
|
||||
|
||||
of_node_put(node_tuner);
|
||||
pr_err("find tuner %d.\n", i);
|
||||
}
|
||||
|
||||
of_node_put(node_tuner);
|
||||
}
|
||||
|
||||
int aml_attach_demod_tuner(struct aml_atvdemod_device *dev)
|
||||
int aml_attach_demod(struct aml_atvdemod_device *dev)
|
||||
{
|
||||
void *p = NULL;
|
||||
struct v4l2_frontend *v4l2_fe = &dev->v4l2_fe;
|
||||
struct dvb_frontend *fe = &v4l2_fe->fe;
|
||||
struct tuner_config cfg = { 0 };
|
||||
|
||||
if (!dev->analog_attached) {
|
||||
p = v4l2_attach(aml_atvdemod_attach, fe, v4l2_fe,
|
||||
dev->i2c_adp, dev->i2c_addr, dev->tuner_id);
|
||||
if (p != NULL)
|
||||
dev->analog_attached = true;
|
||||
else {
|
||||
pr_err("%s: attach demod error.\n", __func__);
|
||||
return -1;
|
||||
}
|
||||
if (dev->tuner_cur < 0) {
|
||||
pr_err("%s: dev->tuner_cur [%d] error.\n",
|
||||
__func__, dev->tuner_cur);
|
||||
return -1;
|
||||
}
|
||||
|
||||
p = NULL;
|
||||
p = v4l2_attach(aml_atvdemod_attach, fe, v4l2_fe,
|
||||
dev->tuners[dev->tuner_cur].i2c_adp,
|
||||
dev->tuners[dev->tuner_cur].cfg.i2c_addr,
|
||||
dev->tuners[dev->tuner_cur].cfg.id);
|
||||
if (p != NULL)
|
||||
dev->analog_attached = true;
|
||||
else {
|
||||
pr_err("%s: attach demod error.\n", __func__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
cfg.id = dev->tuner_id;
|
||||
cfg.i2c_addr = dev->i2c_addr;
|
||||
cfg.xtal = dev->tuner_xtal;
|
||||
cfg.xtal_mode = dev->tuner_xtal_mode;
|
||||
cfg.xtal_cap = dev->tuner_xtal_cap;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!dev->tuner_attached) {
|
||||
switch (dev->tuner_id) {
|
||||
case AM_TUNER_R840:
|
||||
p = v4l2_attach(r840_attach, fe,
|
||||
dev->i2c_adp, &cfg);
|
||||
break;
|
||||
case AM_TUNER_R842:
|
||||
p = v4l2_attach(r842_attach, fe,
|
||||
dev->i2c_adp, &cfg);
|
||||
break;
|
||||
case AM_TUNER_SI2151:
|
||||
p = v4l2_attach(si2151_attach, fe,
|
||||
dev->i2c_adp, &cfg);
|
||||
break;
|
||||
case AM_TUNER_SI2159:
|
||||
p = v4l2_attach(si2159_attach, fe,
|
||||
dev->i2c_adp, &cfg);
|
||||
break;
|
||||
case AM_TUNER_MXL661:
|
||||
p = v4l2_attach(mxl661_attach, fe,
|
||||
dev->i2c_adp, &cfg);
|
||||
break;
|
||||
}
|
||||
int aml_attach_tuner(struct aml_atvdemod_device *dev)
|
||||
{
|
||||
void *p = NULL;
|
||||
struct v4l2_frontend *v4l2_fe = &dev->v4l2_fe;
|
||||
struct dvb_frontend *fe = &v4l2_fe->fe;
|
||||
struct tuner_config *cfg = NULL;
|
||||
|
||||
if (p != NULL)
|
||||
dev->tuner_attached = true;
|
||||
else {
|
||||
pr_err("%s: attach tuner [%d] error.\n",
|
||||
__func__, dev->tuner_id);
|
||||
return -1;
|
||||
}
|
||||
if (dev->tuner_cur < 0) {
|
||||
pr_err("%s: dev->tuner_cur [%d] error.\n",
|
||||
__func__, dev->tuner_cur);
|
||||
return -1;
|
||||
}
|
||||
|
||||
cfg = &dev->tuners[dev->tuner_cur].cfg;
|
||||
|
||||
switch (cfg->id) {
|
||||
case AM_TUNER_R840:
|
||||
p = v4l2_attach(r840_attach, fe,
|
||||
dev->tuners[dev->tuner_cur].i2c_adp, cfg);
|
||||
break;
|
||||
case AM_TUNER_R842:
|
||||
p = v4l2_attach(r842_attach, fe,
|
||||
dev->tuners[dev->tuner_cur].i2c_adp, cfg);
|
||||
break;
|
||||
case AM_TUNER_SI2151:
|
||||
p = v4l2_attach(si2151_attach, fe,
|
||||
dev->tuners[dev->tuner_cur].i2c_adp, cfg);
|
||||
break;
|
||||
case AM_TUNER_SI2159:
|
||||
p = v4l2_attach(si2159_attach, fe,
|
||||
dev->tuners[dev->tuner_cur].i2c_adp, cfg);
|
||||
break;
|
||||
case AM_TUNER_MXL661:
|
||||
p = v4l2_attach(mxl661_attach, fe,
|
||||
dev->tuners[dev->tuner_cur].i2c_adp, cfg);
|
||||
break;
|
||||
default:
|
||||
pr_err("%s: Nonsupport tuner [%d].\n", __func__, cfg->id);
|
||||
break;
|
||||
}
|
||||
|
||||
if (p != NULL) {
|
||||
dev->tuner_attached = true;
|
||||
v4l2_fe->tuner_id = cfg->id;
|
||||
v4l2_fe->i2c.addr = cfg->i2c_addr;
|
||||
v4l2_fe->i2c.adapter = dev->tuners[dev->tuner_cur].i2c_adp;
|
||||
} else {
|
||||
pr_err("%s: attach tuner [%d] error.\n", __func__, cfg->id);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -634,12 +728,11 @@ static int aml_atvdemod_probe(struct platform_device *pdev)
|
||||
|
||||
aml_atvdemod_dt_parse(dev);
|
||||
|
||||
aml_attach_demod_tuner(dev);
|
||||
aml_attach_demod(dev);
|
||||
aml_attach_tuner(dev);
|
||||
|
||||
dev->v4l2_fe.dev = dev->dev;
|
||||
dev->v4l2_fe.tuner_id = dev->tuner_id;
|
||||
dev->v4l2_fe.i2c.addr = dev->i2c_addr;
|
||||
dev->v4l2_fe.i2c.adapter = dev->i2c_adp;
|
||||
|
||||
ret = v4l2_resister_frontend(&dev->v4l2_fe);
|
||||
if (ret < 0) {
|
||||
pr_err("resister v4l2 fail.\n");
|
||||
@@ -658,6 +751,7 @@ fail_register_v4l2:
|
||||
fail_get_resource:
|
||||
class_unregister(&dev->cls);
|
||||
fail_class_register:
|
||||
kfree(dev->tuners);
|
||||
kfree(dev);
|
||||
|
||||
pr_info("%s: fail.\n", __func__);
|
||||
@@ -679,6 +773,7 @@ static int aml_atvdemod_remove(struct platform_device *pdev)
|
||||
|
||||
amlatvdemod_devp = NULL;
|
||||
|
||||
kfree(dev->tuners);
|
||||
kfree(dev);
|
||||
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
|
||||
@@ -38,18 +38,20 @@ struct aml_atvdemod_parameters {
|
||||
unsigned int reserved;
|
||||
};
|
||||
|
||||
struct aml_tuner {
|
||||
struct tuner_config cfg;
|
||||
unsigned int i2c_adapter_id;
|
||||
struct i2c_adapter *i2c_adp;
|
||||
};
|
||||
|
||||
struct aml_atvdemod_device {
|
||||
char *name;
|
||||
struct class cls;
|
||||
struct device *dev;
|
||||
|
||||
unsigned int tuner_id;
|
||||
unsigned int tuner_xtal;
|
||||
unsigned int tuner_xtal_mode;
|
||||
unsigned int tuner_xtal_cap;
|
||||
unsigned int i2c_addr;
|
||||
unsigned int i2c_adapter_id;
|
||||
struct i2c_adapter *i2c_adp;
|
||||
unsigned int tuner_num;
|
||||
int tuner_cur;
|
||||
struct aml_tuner *tuners;
|
||||
|
||||
unsigned int if_freq;
|
||||
unsigned int if_inv;
|
||||
@@ -94,6 +96,7 @@ struct aml_atvdemod_device {
|
||||
|
||||
extern struct aml_atvdemod_device *amlatvdemod_devp;
|
||||
|
||||
extern int aml_attach_demod_tuner(struct aml_atvdemod_device *dev);
|
||||
extern int aml_attach_demod(struct aml_atvdemod_device *dev);
|
||||
extern int aml_attach_tuner(struct aml_atvdemod_device *dev);
|
||||
|
||||
#endif /* __ATV_DEMOD_DRIVER_H__ */
|
||||
|
||||
@@ -256,14 +256,12 @@ static void atv_demod_set_params(struct dvb_frontend *fe,
|
||||
amlatvdemod_devp->std != p->param.std ||
|
||||
amlatvdemod_devp->audmode != p->param.audmode ||
|
||||
amlatvdemod_devp->if_freq != p->if_freq ||
|
||||
amlatvdemod_devp->if_inv != p->if_inv ||
|
||||
amlatvdemod_devp->tuner_id != p->tuner_id) {
|
||||
amlatvdemod_devp->if_inv != p->if_inv) {
|
||||
|
||||
amlatvdemod_devp->std = p->param.std;
|
||||
amlatvdemod_devp->audmode = p->param.audmode;
|
||||
amlatvdemod_devp->if_freq = p->if_freq;
|
||||
amlatvdemod_devp->if_inv = p->if_inv;
|
||||
amlatvdemod_devp->tuner_id = p->tuner_id;
|
||||
|
||||
atv_dmd_set_std();
|
||||
atvdemod_init(!priv->scanning);
|
||||
@@ -873,7 +871,11 @@ static int atvdemod_fe_set_property(struct v4l2_frontend *v4l2_fe,
|
||||
break;
|
||||
|
||||
case V4L2_SLOW_SEARCH_MODE:
|
||||
tvp->data = slow_mode;
|
||||
slow_mode = tvp->data;
|
||||
break;
|
||||
|
||||
case V4L2_SIF_OVER_MODULATION:
|
||||
priv->sound_sys.sif_over_modulation = tvp->data;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -898,7 +900,7 @@ static int atvdemod_fe_get_property(struct v4l2_frontend *v4l2_fe,
|
||||
break;
|
||||
|
||||
case V4L2_SLOW_SEARCH_MODE:
|
||||
slow_mode = tvp->data;
|
||||
tvp->data = slow_mode;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -49,6 +49,7 @@ struct atv_demod_sound_system {
|
||||
unsigned int audio_std;
|
||||
unsigned int input_mode;
|
||||
unsigned int output_mode;
|
||||
int sif_over_modulation;
|
||||
};
|
||||
|
||||
struct atv_demod_priv {
|
||||
|
||||
@@ -456,12 +456,11 @@ static int v4l2_frontend_read_status(struct v4l2_frontend *v4l2_fe,
|
||||
|
||||
if (!status)
|
||||
return -1;
|
||||
#if 0
|
||||
if (analog_ops->tuner_status)
|
||||
analog_ops->tuner_status(&v4l2_fe->fe, status);
|
||||
|
||||
if (analog_ops->has_signal)
|
||||
analog_ops->has_signal(&v4l2_fe->fe, (u16 *) status);
|
||||
else if (tuner_ops->get_status)
|
||||
tuner_ops->get_status(&v4l2_fe->fe, status);
|
||||
#endif
|
||||
tuner_ops->get_status(&v4l2_fe->fe, (u32 *) status);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -538,6 +537,10 @@ static int v4l2_property_process_set(struct v4l2_frontend *v4l2_fe,
|
||||
struct v4l2_property *tvp, struct file *file)
|
||||
{
|
||||
int r = 0;
|
||||
#if 0
|
||||
int i = 0;
|
||||
int id = 0;
|
||||
#endif
|
||||
struct v4l2_analog_parameters *params = &v4l2_fe->params;
|
||||
|
||||
v4l2_property_dump(v4l2_fe, true, tvp);
|
||||
@@ -548,6 +551,7 @@ static int v4l2_property_process_set(struct v4l2_frontend *v4l2_fe,
|
||||
break;
|
||||
case V4L2_SOUND_SYS:
|
||||
case V4L2_SLOW_SEARCH_MODE:
|
||||
case V4L2_SIF_OVER_MODULATION:
|
||||
/* Allow the frontend to override outgoing properties */
|
||||
if (v4l2_fe->ops.set_property) {
|
||||
r = v4l2_fe->ops.set_property(v4l2_fe, tvp);
|
||||
@@ -569,6 +573,45 @@ static int v4l2_property_process_set(struct v4l2_frontend *v4l2_fe,
|
||||
| (params->audmode);
|
||||
}
|
||||
break;
|
||||
case V4L2_FINE_TUNE:
|
||||
params->frequency += tvp->data;
|
||||
break;
|
||||
case V4L2_TUNER_TYPE:
|
||||
#if 0 /* This supports dynamically setting the tuner type */
|
||||
for (i = 0; i < amlatvdemod_devp->tuner_num; ++i) {
|
||||
if (amlatvdemod_devp->tuners[i].cfg.id == tvp->data) {
|
||||
id = amlatvdemod_devp->tuners[i].cfg.id;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (id == 0) {
|
||||
pr_err("%s: nonsupport tuner %d.\n",
|
||||
__func__, tvp->data);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (amlatvdemod_devp->tuner_cur == i) {
|
||||
pr_err("%s: the same tuner %d.\n",
|
||||
__func__, i);
|
||||
break;
|
||||
}
|
||||
|
||||
if (amlatvdemod_devp->tuner_attached) {
|
||||
if (v4l2_fe->fe.ops.tuner_ops.release)
|
||||
v4l2_fe->fe.ops.tuner_ops.release(&v4l2_fe->fe);
|
||||
}
|
||||
|
||||
v4l2_fe->tuner_id = id;
|
||||
if (aml_attach_tuner(amlatvdemod_devp) < 0) {
|
||||
pr_err("%s: attach tuner %d error.\n",
|
||||
__func__, id);
|
||||
return -EINVAL;
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case V4L2_TUNER_IF_FREQ:
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -580,6 +623,7 @@ static int v4l2_property_process_get(struct v4l2_frontend *v4l2_fe,
|
||||
struct v4l2_property *tvp, struct file *file)
|
||||
{
|
||||
int r = 0;
|
||||
int i = 0;
|
||||
struct v4l2_analog_parameters *params = &v4l2_fe->params;
|
||||
|
||||
switch (tvp->cmd) {
|
||||
@@ -600,6 +644,18 @@ static int v4l2_property_process_get(struct v4l2_frontend *v4l2_fe,
|
||||
/* std & 0x00FFFFFF: audio std */
|
||||
tvp->data = params->std;
|
||||
break;
|
||||
case V4L2_TUNER_TYPE:
|
||||
i = amlatvdemod_devp->tuner_cur;
|
||||
if (i < 0) {
|
||||
pr_err("%s: Has not been set tuner type.\n", __func__);
|
||||
tvp->data = 0;
|
||||
return -EINVAL;
|
||||
}
|
||||
tvp->data = amlatvdemod_devp->tuners[i].cfg.id;
|
||||
break;
|
||||
case V4L2_TUNER_IF_FREQ:
|
||||
tvp->data = amlatvdemod_devp->if_freq;
|
||||
break;
|
||||
default:
|
||||
pr_dbg("%s: V4L2 property %d doesn't exist\n",
|
||||
__func__, tvp->cmd);
|
||||
@@ -764,11 +820,19 @@ static int v4l2_frontend_open(struct file *filp)
|
||||
struct v4l2_frontend_private *fepriv = v4l2_fe->frontend_priv;
|
||||
|
||||
/* Because tuner ko insmod after demod, so need check */
|
||||
if (!amlatvdemod_devp->tuner_attached
|
||||
|| !amlatvdemod_devp->analog_attached) {
|
||||
ret = aml_attach_demod_tuner(amlatvdemod_devp);
|
||||
if (!amlatvdemod_devp->analog_attached) {
|
||||
ret = aml_attach_demod(amlatvdemod_devp);
|
||||
if (ret < 0) {
|
||||
pr_err("%s: attach demod or tuner %d error.\n",
|
||||
pr_err("%s: attach demod %d error.\n",
|
||||
__func__, v4l2_fe->tuner_id);
|
||||
return -EBUSY;
|
||||
}
|
||||
}
|
||||
|
||||
if (!amlatvdemod_devp->tuner_attached) {
|
||||
ret = aml_attach_tuner(amlatvdemod_devp);
|
||||
if (ret < 0) {
|
||||
pr_err("%s: attach tuner %d error.\n",
|
||||
__func__, v4l2_fe->tuner_id);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
@@ -94,6 +94,10 @@
|
||||
#define V4L2_SLOW_SEARCH_MODE 3
|
||||
#define V4L2_FREQUENCY 4
|
||||
#define V4L2_STD 5
|
||||
#define V4L2_FINE_TUNE 6
|
||||
#define V4L2_SIF_OVER_MODULATION 7
|
||||
#define V4L2_TUNER_TYPE 8
|
||||
#define V4L2_TUNER_IF_FREQ 9
|
||||
|
||||
struct v4l2_frontend;
|
||||
|
||||
|
||||
@@ -201,8 +201,10 @@ void atv_dmd_misc(void)
|
||||
atv_dmd_wr_byte(APB_BLOCK_ADDR_VDAGC, 0x45, 0x90); /*zhuangwei*/
|
||||
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_VDAGC, 0x44, 0x5c8808c1);/*zhuangwei*/
|
||||
if (amlatvdemod_devp->tuner_id == AM_TUNER_R840 ||
|
||||
amlatvdemod_devp->tuner_id == AM_TUNER_R842) {
|
||||
if (amlatvdemod_devp->tuners[amlatvdemod_devp->tuner_cur].cfg.id
|
||||
== AM_TUNER_R840 ||
|
||||
amlatvdemod_devp->tuners[amlatvdemod_devp->tuner_cur].cfg.id
|
||||
== AM_TUNER_R842) {
|
||||
/*zhuangwei*/
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_VDAGC, 0x3c, reg_23cf);
|
||||
/*guanzhong@20150804a*/
|
||||
@@ -230,7 +232,8 @@ void atv_dmd_misc(void)
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_AGC_PWM, 0x08, 0x46170200);
|
||||
}
|
||||
|
||||
if (amlatvdemod_devp->tuner_id == AM_TUNER_MXL661) {
|
||||
if (amlatvdemod_devp->tuners[amlatvdemod_devp->tuner_cur].cfg.id
|
||||
== AM_TUNER_MXL661) {
|
||||
/*test in sky*/
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_DAC_UPS, 0x04, 0xbffa0000);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_DAC_UPS, 0x00, 0x6f4000);
|
||||
@@ -1020,8 +1023,10 @@ void configure_receiver(int Broadcast_Standard, unsigned int Tuner_IF_Frequency,
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_ADC_SE, 0x0, 0x03180e0f);
|
||||
else
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_ADC_SE, 0x0, 0x03150e0f);
|
||||
if (amlatvdemod_devp->tuner_id == AM_TUNER_R840 ||
|
||||
amlatvdemod_devp->tuner_id == AM_TUNER_R842) {
|
||||
if (amlatvdemod_devp->tuners[amlatvdemod_devp->tuner_cur].cfg.id
|
||||
== AM_TUNER_R840 ||
|
||||
amlatvdemod_devp->tuners[amlatvdemod_devp->tuner_cur].cfg.id
|
||||
== AM_TUNER_R842) {
|
||||
/*config pwm for tuner r840*/
|
||||
atv_dmd_wr_byte(APB_BLOCK_ADDR_ADC_SE, 1, 0xf);
|
||||
}
|
||||
@@ -1298,8 +1303,10 @@ void configure_receiver(int Broadcast_Standard, unsigned int Tuner_IF_Frequency,
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_AGC_PWM, 0x04, 0xc8);
|
||||
/*26 dB dynamic range*/
|
||||
atv_dmd_wr_byte(APB_BLOCK_ADDR_AGC_PWM, 0x09, 0xa);
|
||||
if (amlatvdemod_devp->tuner_id == AM_TUNER_R840 ||
|
||||
amlatvdemod_devp->tuner_id == AM_TUNER_R842) {
|
||||
if (amlatvdemod_devp->tuners[amlatvdemod_devp->tuner_cur].cfg.id
|
||||
== AM_TUNER_R840 ||
|
||||
amlatvdemod_devp->tuners[amlatvdemod_devp->tuner_cur].cfg.id
|
||||
== AM_TUNER_R842) {
|
||||
/*config pwm for tuner r840*/
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_AGC_PWM, 0, 0xc80);
|
||||
/* guanzhong for Tuner AGC shock */
|
||||
@@ -1990,6 +1997,8 @@ void atvdemod_uninit(void)
|
||||
void atv_dmd_set_std(void)
|
||||
{
|
||||
v4l2_std_id ptstd = amlatvdemod_devp->std;
|
||||
int tuner_index = amlatvdemod_devp->tuner_cur;
|
||||
int tuner_id = amlatvdemod_devp->tuners[tuner_index].cfg.id;
|
||||
|
||||
/* set broad standard of tuner*/
|
||||
if (((ptstd & V4L2_COLOR_STD_PAL)
|
||||
@@ -2066,11 +2075,11 @@ void atv_dmd_set_std(void)
|
||||
}
|
||||
|
||||
/* Tuner returns the if and signal inverted states */
|
||||
if ((amlatvdemod_devp->tuner_id == AM_TUNER_R840) ||
|
||||
(amlatvdemod_devp->tuner_id == AM_TUNER_R842) ||
|
||||
(amlatvdemod_devp->tuner_id == AM_TUNER_SI2151) ||
|
||||
(amlatvdemod_devp->tuner_id == AM_TUNER_SI2159) ||
|
||||
(amlatvdemod_devp->tuner_id == AM_TUNER_MXL661)) {
|
||||
if ((tuner_id == AM_TUNER_R840) ||
|
||||
(tuner_id == AM_TUNER_R842) ||
|
||||
(tuner_id == AM_TUNER_SI2151) ||
|
||||
(tuner_id == AM_TUNER_SI2159) ||
|
||||
(tuner_id == AM_TUNER_MXL661)) {
|
||||
if_freq = amlatvdemod_devp->if_freq;
|
||||
if_inv = amlatvdemod_devp->if_inv;
|
||||
}
|
||||
|
||||
@@ -124,6 +124,7 @@ extern void aml_fe_get_atvaudio_state(int *state);
|
||||
|
||||
/* For attach tuner driver start*/
|
||||
enum tuner_type {
|
||||
AM_TUNER_NONE = 0,
|
||||
AM_TUNER_SI2176 = 1,
|
||||
AM_TUNER_SI2196 = 2,
|
||||
AM_TUNER_FQ1216 = 3,
|
||||
|
||||
Reference in New Issue
Block a user