}
/* ****************************************************** */
-static char *bl_pinmux_str[] = {
+#define BL_PINMUX_MAX 6
+static char *bl_pinmux_str[BL_PINMUX_MAX] = {
"pwm_on", /* 0 */
"pwm_vs_on", /* 1 */
"pwm_combo_0_1_on", /* 2 */
break;
}
+ if (index >= BL_PINMUX_MAX) {
+ BLERR("%s: pinmux index %d is invalid\n", __func__, index);
+ return;
+ }
+
/* request pwm pinmux */
bconf->pin = devm_pinctrl_get_select(bl_drv->dev, bl_pinmux_str[index]);
if (IS_ERR(bconf->pin)) {
0xff, 0x00, 0x00, 0x00, //ending
};
-static int i2c_lp8556_write(unsigned char *buff, unsigned int len)
+static int i2c_lp8556_write(struct i2c_client *i2client,
+ unsigned char *buff, unsigned int len)
{
int ret = 0;
- struct aml_bl_extern_i2c_dev_s *i2c_dev = aml_bl_extern_i2c_get_dev();
-
struct i2c_msg msg[] = {
{
- .addr = i2c_dev->client->addr,
+ .addr = i2client->addr,
.flags = 0,
.len = len,
.buf = buff,
};
BLEX("%s\n", __func__);
- if (i2c_dev == NULL) {
- BLEXERR("invalid i2c device\n");
- return -1;
- }
-
- ret = i2c_transfer(i2c_dev->client->adapter, msg, 1);
+ ret = i2c_transfer(i2client->adapter, msg, 1);
if (ret < 0)
- BLEXERR("i2c write failed [addr 0x%02x]\n",
- i2c_dev->client->addr);
+ BLEXERR("i2c write failed [addr 0x%02x]\n", i2client->addr);
return ret;
}
int i = 0, len;
int ret = 0;
struct aml_bl_extern_driver_s *bl_extern = aml_bl_extern_get_driver();
+ struct aml_bl_extern_i2c_dev_s *i2c_dev = aml_bl_extern_i2c_get_dev();
+
BLEX("%s\n", __func__);
len = BL_EXTERN_CMD_SIZE;
} else if (init_table[i] == BL_EXTERN_INIT_NONE) {
/* do nothing, only for delay */
} else if (init_table[i] == BL_EXTERN_INIT_CMD) {
- ret = i2c_lp8556_write(
+ if (i2c_dev == NULL) {
+ BLEXERR("invalid i2c device\n");
+ return -1;
+ }
+ ret = i2c_lp8556_write(i2c_dev->client,
&init_table[i+1], (len-2));
} else {
BLEXERR("%s(%d: %s): power_type %d is invalid\n",
int ret = 0;
struct aml_bl_drv_s *bl_drv = aml_bl_get_driver();
struct aml_bl_extern_driver_s *bl_extern = aml_bl_extern_get_driver();
+ struct aml_bl_extern_i2c_dev_s *i2c_dev = aml_bl_extern_i2c_get_dev();
unsigned int level_max, level_min;
unsigned int dim_max, dim_min;
(level_max - level_min);
level &= 0xff;
+ if (i2c_dev == NULL) {
+ BLEXERR("invalid i2c device\n");
+ return -1;
+ }
if (bl_status) {
tData[0] = 0x0;
tData[1] = level;
- ret = i2c_lp8556_write(tData, 2);
+ ret = i2c_lp8556_write(i2c_dev->client, tData, 2);
}
return ret;
}
}
}
+static char lcd_ss_str[10] = {
+ 'u', 'n', 'k', 'n', 'o', 'w', 'n', '\0',
+};
char *lcd_get_spread_spectrum(void)
{
char *ss_str;
- int ss_level;
+ unsigned int ss_level;
struct aml_lcd_drv_s *lcd_drv = aml_lcd_get_driver();
ss_level = lcd_drv->lcd_config->lcd_timing.ss_level;
ss_str = lcd_pll_ss_table_txlx[ss_level];
break;
default:
- ss_str = "unknown";
+ ss_str = lcd_ss_str;
break;
}
/* 20180122: support txlx, optimize lcd noitfier event */
/* 20180226: g12a support */
/* 20180425: tvconfig suuport */
-#define LCD_DRV_VERSION "20180425"
+/* 20180620: fix coverity errors */
+#define LCD_DRV_VERSION "20180620"
#define VPP_OUT_SATURATE (1 << 0)
switch (lcd_debug_dump_state) {
case LCD_DEBUG_DUMP_INFO:
len = lcd_info_print(print_buf, 0);
- len += lcd_power_info_print((print_buf+len), len);
+ lcd_power_info_print((print_buf+len), len);
break;
case LCD_DEBUG_DUMP_REG:
- len = lcd_reg_print(print_buf, 0);
+ lcd_reg_print(print_buf, 0);
break;
case LCD_DEBUG_DUMP_HDR:
- len = lcd_hdr_info_print(print_buf, 0);
+ lcd_hdr_info_print(print_buf, 0);
break;
default:
- len = sprintf(print_buf, "%s: invalid command\n", __func__);
+ sprintf(print_buf, "%s: invalid command\n", __func__);
break;
}
len = sprintf(buf, "%s\n", print_buf);
EXTERR("invalid i2c device\n");
return -1;
}
- ret = lcd_extern_i2c_write(
- i2c_device->client,
+ ret = lcd_extern_i2c_write(i2c_device->client,
&init_table[i+1], (cmd_size-2));
} else {
EXTERR("%s(%d: %s): power_type %d is invalid\n",
else if (addr == 0x72)
client = aml_anx6345_72_client;
+ if (client == NULL) {
+ EXTERR("%s: invalid i2c client\n", __func__);
+ return -1;
+ }
ret = aml_i2c_write(client, buff, 1);
return ret;
}
else if (addr == 0x72)
client = aml_anx6345_72_client;
+ if (client == NULL) {
+ EXTERR("%s: invalid i2c client\n", __func__);
+ return -1;
+ }
ret = aml_i2c_read(client, data, 1);
return ret;
}
GFP_KERNEL);
if (lcd_ext_init_off_table == NULL) {
EXTERR("failed to alloc default init table\n");
+ kfree(lcd_ext_init_on_table);
return -1;
}
lcd_ext_init_on_table[0] = LCD_EXTERN_INIT_END;
unsigned int div_sel, phy_div;
phy_div = pconf->lcd_control.vbyone_config->phy_div;
+ lcd_bits = pconf->lcd_basic.lcd_bits;
- lcd_bits = 10;
switch (lcd_bits) {
case 6:
div_sel = 0;
lcd_vx1_wait_hpd();
lcd_vbyone_phy_set(pconf, 1);
lcd_tablet_vbyone_wait_stable();
+ break;
case LCD_MIPI:
lcd_mipi_phy_set(pconf, 1);
lcd_mipi_control_set(pconf, 1);
lcd_vbyone_phy_set(pconf, 0);
lcd_vbyone_pinmux_set(0);
lcd_vbyone_disable();
+ break;
case LCD_MIPI:
mipi_dsi_link_off(pconf);
lcd_mipi_phy_set(pconf, 0);
sprintf(propname, "dsi_init_off");
}
- para = kmalloc(sizeof(unsigned int)*100, GFP_KERNEL);
+ para = kcalloc(n_max, sizeof(unsigned int), GFP_KERNEL);
if (para == NULL) {
LCDERR("%s: Not enough memory\n", __func__);
return -1;
}
ret = of_property_read_u32_index(m_node, propname, 0, ¶[0]);
if (ret) {
- LCDERR("faild to get %s\n", propname);
- kfree(para);
- return -1;
+ LCDERR("failed to get %s\n", propname);
+ goto lcd_mipi_dsi_init_table_detect_err;
}
i = 0;
while ((i + 1) < n_max) {
ret = of_property_read_u32_index(m_node, propname, i, &val);
+ if (ret) {
+ LCDERR("failed to get %s\n", propname);
+ goto lcd_mipi_dsi_init_table_detect_err;
+ }
if (val == 0xff) {
ret = of_property_read_u32_index(m_node,
propname, (i+1), &val);
+ if (ret) {
+ LCDERR("failed to get %s\n", propname);
+ goto lcd_mipi_dsi_init_table_detect_err;
+ }
i += 2;
if (val == 0xff)
break;
/* probe gpio */
ret = of_property_read_u32_index(m_node,
propname, (i + DSI_GPIO_INDEX), &val);
+ if (ret) {
+ LCDERR("failed to get %s\n", propname);
+ goto lcd_mipi_dsi_init_table_detect_err;
+ }
lcd_cpu_gpio_probe(val);
- /* cmd size */
+ /* cmd size */
ret = of_property_read_u32_index(m_node,
propname, (i + DSI_CMD_SIZE_INDEX), &val);
+ if (ret) {
+ LCDERR("failed to get %s\n", propname);
+ goto lcd_mipi_dsi_init_table_detect_err;
+ }
if (val < 3) {
LCDERR("get %s wrong cmd_size %d for gpio\n",
propname, val);
} else if (val == 0xfc) { /* check state */
ret = of_property_read_u32_index(m_node,
propname, (i + DSI_CMD_SIZE_INDEX), &val);
+ if (ret) {
+ LCDERR("failed to get %s\n", propname);
+ goto lcd_mipi_dsi_init_table_detect_err;
+ }
if ((i + 2 + val) >= n_max) {
LCDERR("get %s cmd_size out of max for check\n",
propname);
ret = of_property_read_u32_index(m_node, propname,
(i + DSI_CMD_SIZE_INDEX + 1), ¶[0]);
+ if (ret) {
+ LCDERR("failed to get %s\n", propname);
+ goto lcd_mipi_dsi_init_table_detect_err;
+ }
ret = of_property_read_u32_index(m_node, propname,
(i + DSI_CMD_SIZE_INDEX + 2), ¶[1]);
+ if (ret) {
+ LCDERR("failed to get %s\n", propname);
+ goto lcd_mipi_dsi_init_table_detect_err;
+ }
dconf->check_reg = para[0];
dconf->check_cnt = para[1];
if (dconf->check_cnt > 0)
} else {
ret = of_property_read_u32_index(m_node,
propname, (i + DSI_CMD_SIZE_INDEX), &val);
+ if (ret) {
+ LCDERR("failed to get %s\n", propname);
+ goto lcd_mipi_dsi_init_table_detect_err;
+ }
if ((i + 2 + val) >= n_max) {
LCDERR("get %s cmd_size out of max\n",
propname);
i = (i > n_max) ? n_max : i;
ret = of_property_read_u32_array(m_node, propname, ¶[0], i);
if (ret) {
- LCDERR("faild to get %s\n", propname);
+ LCDERR("failed to get %s\n", propname);
+ goto lcd_mipi_dsi_init_table_detect_err;
} else {
for (j = 0; j < i; j++)
dsi_table[j] = (unsigned char)(para[j] & 0xff);
mipi_dsi_init_table_print(dconf, on_off);
kfree(para);
+ return 0;
+
+lcd_mipi_dsi_init_table_detect_err:
+ kfree(para);
return ret;
}
if (lcd_debug_print_flag)
LCDUKEY("%s size: %d\n", key_name, key_len);
-lcd_unifykey_read:
buf = kzalloc((sizeof(unsigned char) * key_len), GFP_KERNEL);
if (!buf) {
LCDUKEYERR("%s: Not enough memory\n", __func__);
return -1;
}
+
+lcd_unifykey_check_read:
ret = key_unify_read(get_ukdev(), key_name, buf, key_len, &key_len);
if (ret < 0) {
LCDUKEYERR("%s unify read error\n", key_name);
- return -1;
+ goto lcd_unifykey_check_err;
}
/* check header */
if (key_len <= LCD_UKEY_HEAD_SIZE) {
LCDUKEYERR("%s unify key_len %d error\n", key_name, key_len);
- return -1;
+ goto lcd_unifykey_check_err;
}
lcd_unifykey_header_check(buf, &key_header);
if (key_len != key_header.data_len) { /* length check */
}
if (retry_cnt < LCD_UKEY_RETRY_CNT_MAX) {
retry_cnt++;
- goto lcd_unifykey_read;
- } else {
- LCDUKEYERR("%s: load unifykey failed\n", key_name);
- return -1;
+ memset(buf, 0, key_len);
+ goto lcd_unifykey_check_read;
}
+ LCDUKEYERR("%s: load unifykey failed\n", key_name);
+ goto lcd_unifykey_check_err;
}
key_crc32 = cal_crc32(0, &buf[4], (key_len - 4)); /* except crc32 */
if (lcd_debug_print_flag) {
key_header.crc32, key_crc32);
if (retry_cnt < LCD_UKEY_RETRY_CNT_MAX) {
retry_cnt++;
- goto lcd_unifykey_read;
- } else {
- LCDUKEYERR("%s: load unifykey failed\n", key_name);
- return -1;
+ memset(buf, 0, key_len);
+ goto lcd_unifykey_check_read;
}
+ LCDUKEYERR("%s: load unifykey failed\n", key_name);
+ goto lcd_unifykey_check_err;
}
+ kfree(buf);
return 0;
+
+lcd_unifykey_check_err:
+ kfree(buf);
+ return -1;
}
int lcd_unifykey_get(char *key_name, unsigned char *buf, int *len)
};
struct aml_lcd_extern_i2c_dev_s {
- char name[20];
+ char name[30];
struct i2c_client *client;
};