cec: cec g12a bring up

PD#156734: cec: change interrupt/pinmux for g12a

Change-Id: I5f9f652addf81db4b792796d41f367073a8ac5b9
Signed-off-by: hongmin hua <hongmin.hua@amlogic.com>
This commit is contained in:
hongmin hua
2018-01-12 15:42:38 +08:00
committed by Yixun Lan
parent fc4450ef86
commit 21245374ef
5 changed files with 115 additions and 3 deletions

View File

@@ -236,6 +236,29 @@
*/
};
};
aocec: aocec {
compatible = "amlogic, aocec-g12a";
device_name = "aocec";
status = "okay";
vendor_name = "Amlogic"; /* Max Chars: 8 */
/* Refer to the following URL at:
* http://standards.ieee.org/develop/regauth/oui/oui.txt
*/
vendor_id = <0x000000>;
product_desc = "G12A"; /* Max Chars: 16 */
cec_osd_string = "AML_MBOX"; /* Max Chars: 14 */
port_num = <1>;
ee_cec;
arc_port_mask = <0x2>;
interrupts = <0 203 1>;
interrupt-names = "hdmi_aocecb";
pinctrl-names = "default";
pinctrl-0=<&eecec_b>;
reg = <0x0 0xFF80023c 0x0 0x4
0x0 0xFF800000 0x0 0x400>;
};
canvas{
compatible = "amlogic, meson, canvas";
dev_name = "amlogic-canvas";

View File

@@ -484,6 +484,28 @@
pinctrl-0 = <&c_uart_pins>;
};
aocec: aocec {
compatible = "amlogic, aocec-g12a";
device_name = "aocec";
status = "okay";
vendor_name = "Amlogic"; /* Max Chars: 8 */
/* Refer to the following URL at:
* http://standards.ieee.org/develop/regauth/oui/oui.txt
*/
vendor_id = <0x000000>;
product_desc = "G12A"; /* Max Chars: 16 */
cec_osd_string = "AML_MBOX"; /* Max Chars: 14 */
port_num = <1>;
ee_cec;
arc_port_mask = <0x2>;
interrupts = <0 203 1>;
interrupt-names = "hdmi_aocecb";
pinctrl-names = "default";
pinctrl-0=<&eecec_b>;
reg = <0x0 0xFF80023c 0x0 0x4
0x0 0xFF800000 0x0 0x400>;
};
dwc3: dwc3@ff500000 {
compatible = "synopsys, dwc3";
status = "okay";

View File

@@ -823,6 +823,20 @@
function = "i2c_ao_slave";
};
};
aocec_a: ao_ceca {
mux {
groups = "cec_ao_a";
function = "cec_ao";
};
};
aocec_b: ao_cecb {
mux {
groups = "cec_ao_b";
function = "cec_ao";
};
};
};
&pinctrl_periphs {
@@ -1092,6 +1106,28 @@
function = "pwm_e";
};
};
c_i2c_master_pin1:c_i2c_pin1 {
mux {
groups = "i2c3_sck_a",
"i2c3_sda_a";
function = "i2c3";
};
};
eecec_a: ee_ceca {
mux {
groups = "cec_ao_a_ee";
function = "cec_ao_ee";
};
};
eecec_b: ee_cecb {
mux {
groups = "cec_ao_b_ee";
function = "cec_ao_ee";
};
};
};
&pinctrl_aobus {

View File

@@ -510,7 +510,7 @@ static void ao_cecb_init(void)
writel(reg, cec_dev->cec_reg + AO_CECB_CLK_CNTL_REG0);
reg = readl(cec_dev->cec_reg + AO_RTI_PWR_CNTL_REG0);
reg |= (0x01 << 6); /* xtal gate */
reg |= (0x01 << 14); /* xtal gate */
writel(reg, cec_dev->cec_reg + AO_RTI_PWR_CNTL_REG0);
data32 = 0;
@@ -1840,7 +1840,6 @@ static ssize_t physical_addr_store(struct class *cla,
if (kstrtouint(buf, 16, &addr) != 1)
return -EINVAL;
if (addr > 0xffff || addr < 0) {
CEC_ERR("invalid input:%s\n", buf);
phy_addr_test = 0;
@@ -2385,6 +2384,11 @@ static const struct cec_platform_data_s cec_txlx_data = {
.ee_to_ao = 1,
};
static const struct cec_platform_data_s cec_g12a_data = {
.line_bit = 7,
.ee_to_ao = 1,
};
static const struct of_device_id aml_cec_dt_match[] = {
{
.compatible = "amlogic, amlogic-aocec",
@@ -2394,6 +2398,10 @@ static const struct of_device_id aml_cec_dt_match[] = {
.compatible = "amlogic, aocec-txlx",
.data = &cec_txlx_data,
},
{
.compatible = "amlogic, aocec-g12a",
.data = &cec_g12a_data,
},
};
#endif
@@ -2406,7 +2414,7 @@ static int aml_cec_probe(struct platform_device *pdev)
struct device_node *node = pdev->dev.of_node;
int irq_idx = 0, r;
const char *irq_name = NULL;
/*struct pinctrl *p;*/
struct pinctrl *p;
struct vendor_info_data *vend;
struct resource *res;
resource_size_t *base;
@@ -2502,6 +2510,19 @@ static int aml_cec_probe(struct platform_device *pdev)
else
ee_cec = 0;
CEC_INFO("using EE cec:%d\n", ee_cec);
/* pinmux set */
if (of_get_property(node, "pinctrl-names", NULL)) {
r = of_property_read_string(node,
"pinctrl-names",
&cec_dev->pin_name);
if ((!r) && strcmp(cec_dev->pin_name, "default")) {
CEC_INFO("%s pin name:%s\n", __func__,
cec_dev->pin_name);
p = devm_pinctrl_get_select(&pdev->dev,
cec_dev->pin_name);
}
}
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (res) {
base = ioremap(res->start, res->end - res->start);
@@ -2614,6 +2635,8 @@ static int aml_cec_probe(struct platform_device *pdev)
cec_pre_init();
queue_delayed_work(cec_dev->cec_thread, &cec_dev->cec_work, 0);
CEC_ERR("%s success end\n", __func__);
return 0;
tag_cec_msg_alloc_err:
input_free_device(cec_dev->cec_info.remote_cec_dev);

View File

@@ -58,6 +58,14 @@
#define AO_DEBUG_REG1 ((0x29 << 2))
#define AO_DEBUG_REG2 ((0x2a << 2))
#define AO_DEBUG_REG3 ((0x2b << 2))
#define AO_CEC_STICKY_DATA0 ((0xca << 2))
#define AO_CEC_STICKY_DATA1 ((0xcb << 2))
#define AO_CEC_STICKY_DATA2 ((0xcc << 2))
#define AO_CEC_STICKY_DATA3 ((0xcd << 2))
#define AO_CEC_STICKY_DATA4 ((0xce << 2))
#define AO_CEC_STICKY_DATA5 ((0xcf << 2))
#define AO_CEC_STICKY_DATA6 ((0xd0 << 2))
#define AO_CEC_STICKY_DATA7 ((0xd1 << 2))
/*
* AOCEC_B