Skip to content

Commit

Permalink
VIM3/VIM3L: update TCA6408 driver
Browse files Browse the repository at this point in the history
add command 'pca953x' for GPIO expander

Signed-off-by: Nick Xie <nick@khadas.com>
  • Loading branch information
numbqq committed Jan 8, 2020
1 parent 5cbc8a5 commit 75ed4a6
Show file tree
Hide file tree
Showing 10 changed files with 47 additions and 246 deletions.
6 changes: 5 additions & 1 deletion board/khadas/configs/kvim3.h
Expand Up @@ -41,7 +41,11 @@
#define CONFIG_KHADAS_CFGLOAD 1
#define CONFIG_KHADAS_SCRIPT 1

#define CONFIG_TCA6408 1
#define CONFIG_PCA953X 1
#define CONFIG_SYS_I2C_PCA953X_ADDR 0x20
#define CONFIG_SYS_I2C_PCA953X_WIDTH { {0x20, 8} }
#define CONFIG_CMD_PCA953X 1
#define CONFIG_CMD_PCA953X_INFO 1
#define CONFIG_POWER_FUSB302 1

#ifdef CONFIG_OF_LIBFDT_OVERLAY
Expand Down
6 changes: 5 additions & 1 deletion board/khadas/configs/kvim3l.h
Expand Up @@ -42,7 +42,11 @@
#define CONFIG_KHADAS_CFGLOAD 1
#define CONFIG_KHADAS_SCRIPT 1

#define CONFIG_TCA6408 1
#define CONFIG_PCA953X 1
#define CONFIG_SYS_I2C_PCA953X_ADDR 0x20
#define CONFIG_SYS_I2C_PCA953X_WIDTH { {0x20, 8} }
#define CONFIG_CMD_PCA953X 1
#define CONFIG_CMD_PCA953X_INFO 1
#define CONFIG_POWER_FUSB302 1

#ifdef CONFIG_OF_LIBFDT_OVERLAY
Expand Down
20 changes: 10 additions & 10 deletions board/khadas/kvim3/kvim3.c
Expand Up @@ -62,8 +62,8 @@
#ifdef CONFIG_AML_SPICC
#include <amlogic/spicc.h>
#endif
#ifdef CONFIG_TCA6408
#include <khadas_tca6408.h>
#ifdef CONFIG_PCA953X
#include <pca953x.h>
#endif
#ifdef CONFIG_POWER_FUSB302
#include <fusb302.h>
Expand Down Expand Up @@ -627,21 +627,21 @@ U_BOOT_DEVICES(meson_pwm) = {
};
#endif /*end CONFIG_PWM_MESON*/

#if (defined (CONFIG_AML_LCD) && defined(CONFIG_TCA6408))
#if (defined (CONFIG_AML_LCD) && defined(CONFIG_PCA953X))
// detect whether the LCD is exist
void board_lcd_detect(void)
{
u8 mask = 0, value = 0;
int ret = 0;

// detect RESET pin
// if the LCD is connected, the RESET pin will be plll high
// if the LCD is not connected, the RESET pin will be low
mask = TCA_LCD_RESET_MASK;
mask = 1 << 0;

ret = tca6408_get_value(&value, mask);
if (ret) {
printf("%s: failed to read LCD_RESET status! error: %d\n", __func__, ret);
pca953x_set_dir(0x20, mask, mask);
value = pca953x_get_val(0x20) & mask ? 1 : 0;
if (value < 0) {
printf("%s: failed to read LCD_RESET status! error: %d\n", __func__, value);

return;
}
Expand Down Expand Up @@ -680,8 +680,8 @@ int board_init(void)
#ifdef CONFIG_SYS_I2C_AML
board_i2c_init();
#endif
#ifdef CONFIG_TCA6408
tca6408_gpio_init();
#ifdef CONFIG_PCA953X
pca953x_init();
#endif

/* power on GPIOZ_5 : CMD_VDD_EN */
Expand Down
21 changes: 11 additions & 10 deletions board/khadas/kvim3l/kvim3l.c
Expand Up @@ -59,8 +59,8 @@
#ifdef CONFIG_AML_SPIFC
#include <amlogic/spifc.h>
#endif
#ifdef CONFIG_TCA6408
#include <khadas_tca6408.h>
#ifdef CONFIG_PCA953X
#include <pca953x.h>
#endif
#ifdef CONFIG_POWER_FUSB302
#include <fusb302.h>
Expand Down Expand Up @@ -608,21 +608,22 @@ U_BOOT_DEVICES(meson_pwm) = {
};
#endif /*end CONFIG_PWM_MESON*/

#if (defined (CONFIG_AML_LCD) && defined(CONFIG_TCA6408))
#if (defined (CONFIG_AML_LCD) && defined(CONFIG_PCA953X))
// detect whether the LCD is exist
void board_lcd_detect(void)
{
u8 mask = 0, value = 0;
int ret = 0;

// detect RESET pin
// if the LCD is connected, the RESET pin will be plll high
// if the LCD is not connected, the RESET pin will be low
mask = TCA_LCD_RESET_MASK;
mask = 1 << 0;

ret = tca6408_get_value(&value, mask);
if (ret) {
printf("%s: failed to read LCD_RESET status! error: %d\n", __func__, ret);
pca953x_set_dir(0x20, mask, mask);
value = pca953x_get_val(0x20) & mask ? 1 : 0;

if (value < 0) {
printf("%s: failed to read LCD_RESET status! error: %d\n", __func__, value);

return;
}
Expand Down Expand Up @@ -663,8 +664,8 @@ int board_init(void)
#ifdef CONFIG_SYS_I2C_AML
board_i2c_init();
#endif
#ifdef CONFIG_TCA6408
tca6408_gpio_init();
#ifdef CONFIG_PCA953X
pca953x_init();
#endif

return 0;
Expand Down
2 changes: 0 additions & 2 deletions drivers/display/lcd/aml_lcd.c
Expand Up @@ -183,8 +183,6 @@ static void lcd_power_ctrl(int status)
#endif
case LCD_POWER_TYPE_EXPANDER_IO:
if (power_step->index < LCD_EXPANDER_GPIO_NUM_MAX) {
// str = lcd_power->expander_gpio[power_step->index];
// gpio = aml_lcd_expander_gpio_name_map_num(str);
aml_lcd_expander_gpio_set(power_step->index, power_step->value);
} else {
LCDERR("expander_gpio index: %d\n", power_step->index);
Expand Down
11 changes: 7 additions & 4 deletions drivers/display/lcd/aml_lcd_gpio.c
Expand Up @@ -20,6 +20,9 @@
#include <amlogic/aml_lcd.h>
#include "aml_lcd_reg.h"
#include "aml_lcd_common.h"
#ifdef CONFIG_PCA953X
#include <pca953x.h>
#endif

int aml_lcd_gpio_name_map_num(const char *name)
{
Expand Down Expand Up @@ -108,8 +111,7 @@ int aml_lcd_expander_gpio_name_map_num(const char *name)
return gpio;
}

extern int tca6408_output_set_value(u8 value, u8 mask);
extern int tca6408_output_get_value(u8 *value);
#ifdef CONFIG_PCA953X
int expander_gpio_direction_output(u8 index, u8 value)
{
u8 val = 0, mask = 0;
Expand All @@ -121,7 +123,8 @@ int expander_gpio_direction_output(u8 index, u8 value)
else
val = mask;

return tca6408_output_set_value(val, mask);
pca953x_set_dir(0x20, mask, PCA953X_DIR_OUT);
return pca953x_set_val(0x20, mask, val);
}

int aml_lcd_expander_gpio_set(int gpio, int value)
Expand All @@ -144,4 +147,4 @@ int aml_lcd_expander_gpio_set(int gpio, int value)

return 0;
}

#endif
10 changes: 8 additions & 2 deletions drivers/gpio/pca953x.c
Expand Up @@ -152,6 +152,12 @@ int pca953x_get_val(uint8_t chip)
return (int)val;
}

void pca953x_init(void)
{
pca953x_set_dir(CONFIG_SYS_I2C_PCA953X_ADDR, 0xff, 0x00);
pca953x_set_val(CONFIG_SYS_I2C_PCA953X_ADDR, 0xff, 0x00);
}

#ifdef CONFIG_CMD_PCA953X
#ifdef CONFIG_CMD_PCA953X_INFO
/*
Expand Down Expand Up @@ -227,7 +233,7 @@ int do_pca953x(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])

/* All commands but "device" require 'maxargs' arguments */
if (!c || !((argc == (c->maxargs)) ||
(((int)c->cmd == PCA953X_CMD_DEVICE) &&
(((long)c->cmd == PCA953X_CMD_DEVICE) &&
(argc == (c->maxargs - 1))))) {
return CMD_RET_USAGE;
}
Expand All @@ -240,7 +246,7 @@ int do_pca953x(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
if (argc > 3)
ul_arg3 = simple_strtoul(argv[3], NULL, 16) & 0x1;

switch ((int)c->cmd) {
switch ((long)c->cmd) {
#ifdef CONFIG_CMD_PCA953X_INFO
case PCA953X_CMD_INFO:
ret = pca953x_info(chip);
Expand Down
185 changes: 0 additions & 185 deletions drivers/misc/khadas_tca6408.c

This file was deleted.

0 comments on commit 75ed4a6

Please sign in to comment.