driver: gpio: npcx: Support GPIO_VOLTAGE_1P8 flag
This CL configures low-voltage (1.8V) detection via GPIO driver with GPIO_VOLTAGE_1P8 flag. It also adds support for this flag in pin_get_config() function. Signed-off-by: Mulin Chao <mlchao@nuvoton.com>
This commit is contained in:
parent
a5fee4c6de
commit
9267655f42
12 changed files with 267 additions and 52 deletions
|
@ -30,10 +30,10 @@ struct gpio_npcx_config {
|
|||
uintptr_t base;
|
||||
/* IO port */
|
||||
int port;
|
||||
/* Size of wui mapping array */
|
||||
int wui_size;
|
||||
/* Mapping table between gpio bits and wui */
|
||||
struct npcx_wui wui_maps[];
|
||||
struct npcx_wui wui_maps[NPCX_GPIO_PORT_PIN_NUM];
|
||||
/* Mapping table between gpio bits and lvol */
|
||||
struct npcx_lvol lvol_maps[NPCX_GPIO_PORT_PIN_NUM];
|
||||
};
|
||||
|
||||
/* Driver data */
|
||||
|
@ -98,6 +98,8 @@ void npcx_gpio_disable_io_pads(const struct device *dev, int pin)
|
|||
static int gpio_npcx_config(const struct device *dev,
|
||||
gpio_pin_t pin, gpio_flags_t flags)
|
||||
{
|
||||
const struct gpio_npcx_config *const config = dev->config;
|
||||
const struct npcx_lvol *lvol = &config->lvol_maps[pin];
|
||||
struct gpio_reg *const inst = HAL_INSTANCE(dev);
|
||||
uint32_t mask = BIT(pin);
|
||||
|
||||
|
@ -121,6 +123,20 @@ static int gpio_npcx_config(const struct device *dev,
|
|||
inst->PDIR &= ~mask;
|
||||
}
|
||||
|
||||
/* Does this IO pad support low-voltage input (1.8V) detection? */
|
||||
if (lvol->ctrl != NPCX_DT_LVOL_CTRL_NONE) {
|
||||
/*
|
||||
* If this IO pad is configured for low-voltage input detection,
|
||||
* the related drive type must select to open-drain also.
|
||||
*/
|
||||
if ((flags & GPIO_VOLTAGE_1P8) != 0) {
|
||||
flags |= GPIO_OPEN_DRAIN;
|
||||
npcx_lvol_set_detect_level(lvol->ctrl, lvol->bit, true);
|
||||
} else {
|
||||
npcx_lvol_set_detect_level(lvol->ctrl, lvol->bit, false);
|
||||
}
|
||||
}
|
||||
|
||||
/* Select open drain 0:push-pull 1:open-drain */
|
||||
if ((flags & GPIO_OPEN_DRAIN) != 0) {
|
||||
inst->PTYPE |= mask;
|
||||
|
@ -159,6 +175,8 @@ static int gpio_npcx_config(const struct device *dev,
|
|||
static int gpio_npcx_pin_get_config(const struct device *port, gpio_pin_t pin,
|
||||
gpio_flags_t *out_flags)
|
||||
{
|
||||
const struct gpio_npcx_config *const config = port->config;
|
||||
const struct npcx_lvol *lvol = &config->lvol_maps[pin];
|
||||
struct gpio_reg *const inst = HAL_INSTANCE(port);
|
||||
uint32_t mask = BIT(pin);
|
||||
gpio_flags_t flags = 0;
|
||||
|
@ -192,6 +210,12 @@ static int gpio_npcx_pin_get_config(const struct device *port, gpio_pin_t pin,
|
|||
}
|
||||
}
|
||||
|
||||
/* Enable low-voltage detection? */
|
||||
if (lvol->ctrl != NPCX_DT_LVOL_CTRL_NONE &&
|
||||
npcx_lvol_get_detect_level(lvol->ctrl, lvol->bit)) {
|
||||
flags |= GPIO_VOLTAGE_1P8;
|
||||
};
|
||||
|
||||
*out_flags = flags;
|
||||
|
||||
return 0;
|
||||
|
@ -360,9 +384,6 @@ int gpio_npcx_init(const struct device *dev)
|
|||
{
|
||||
ARG_UNUSED(dev);
|
||||
|
||||
__ASSERT(((const struct gpio_npcx_config *)dev->config)->wui_size ==
|
||||
NPCX_GPIO_PORT_PIN_NUM,
|
||||
"wui_maps array size must equal to its pin number");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -374,9 +395,13 @@ int gpio_npcx_init(const struct device *dev)
|
|||
}, \
|
||||
.base = DT_INST_REG_ADDR(inst), \
|
||||
.port = inst, \
|
||||
.wui_size = NPCX_DT_WUI_ITEMS_LEN(inst), \
|
||||
.wui_maps = NPCX_DT_WUI_ITEMS_LIST(inst) \
|
||||
.wui_maps = NPCX_DT_WUI_ITEMS_LIST(inst), \
|
||||
.lvol_maps = NPCX_DT_LVOL_ITEMS_LIST(inst), \
|
||||
}; \
|
||||
BUILD_ASSERT(NPCX_DT_WUI_ITEMS_LEN(inst) == NPCX_GPIO_PORT_PIN_NUM, \
|
||||
"size of prop. wui-maps must equal to pin number!"); \
|
||||
BUILD_ASSERT(NPCX_DT_LVOL_ITEMS_LEN(inst) == NPCX_GPIO_PORT_PIN_NUM, \
|
||||
"size of prop. lvol-maps must equal to pin number!"); \
|
||||
\
|
||||
static struct gpio_npcx_data gpio_npcx_data_##inst; \
|
||||
\
|
||||
|
|
|
@ -81,7 +81,7 @@
|
|||
0x400a5000 0x2000>;
|
||||
reg-names = "scfg", "glue";
|
||||
#alt-cells = <3>;
|
||||
#lvol-cells = <4>;
|
||||
#lvol-cells = <2>;
|
||||
label = "SCFG";
|
||||
};
|
||||
|
||||
|
|
|
@ -10,119 +10,127 @@
|
|||
|
||||
/* Low-Voltage IO Control 0 */
|
||||
lvol_iob5: lvol00 {
|
||||
lvols = <&scfg 0x0b 5 0 0>;
|
||||
lvols = <&scfg 0 0>;
|
||||
};
|
||||
lvol_iob4: lvol01 {
|
||||
lvols = <&scfg 0x0b 4 0 1>;
|
||||
lvols = <&scfg 0 1>;
|
||||
};
|
||||
lvol_iob3: lvol02 {
|
||||
lvols = <&scfg 0x0b 3 0 2>;
|
||||
lvols = <&scfg 0 2>;
|
||||
};
|
||||
lvol_iob2: lvol03 {
|
||||
lvols = <&scfg 0x0b 2 0 3>;
|
||||
lvols = <&scfg 0 3>;
|
||||
};
|
||||
lvol_io90: lvol04 {
|
||||
lvols = <&scfg 0x09 0 0 4>;
|
||||
lvols = <&scfg 0 4>;
|
||||
};
|
||||
lvol_io87: lvol05 {
|
||||
lvols = <&scfg 0x08 7 0 5>;
|
||||
lvols = <&scfg 0 5>;
|
||||
};
|
||||
lvol_io00: lvol06 {
|
||||
lvols = <&scfg 0x00 0 0 6>;
|
||||
lvols = <&scfg 0 6>;
|
||||
};
|
||||
lvol_io33: lvol07 {
|
||||
lvols = <&scfg 0x03 3 0 7>;
|
||||
lvols = <&scfg 0 7>;
|
||||
};
|
||||
|
||||
/* Low-Voltage IO Control 1 */
|
||||
lvol_io92: lvol10 {
|
||||
lvols = <&scfg 0x09 2 1 0>;
|
||||
lvols = <&scfg 1 0>;
|
||||
};
|
||||
lvol_io91: lvol11 {
|
||||
lvols = <&scfg 0x09 1 1 1>;
|
||||
lvols = <&scfg 1 1>;
|
||||
};
|
||||
lvol_iod1: lvol12 {
|
||||
lvols = <&scfg 0x0d 1 1 2>;
|
||||
lvols = <&scfg 1 2>;
|
||||
};
|
||||
lvol_iod0: lvol13 {
|
||||
lvols = <&scfg 0x0d 0 1 3>;
|
||||
lvols = <&scfg 1 3>;
|
||||
};
|
||||
lvol_io36: lvol14 {
|
||||
lvols = <&scfg 0x03 6 1 4>;
|
||||
lvols = <&scfg 1 4>;
|
||||
};
|
||||
lvol_io64: lvol15 {
|
||||
lvols = <&scfg 0x06 4 1 5>;
|
||||
lvols = <&scfg 1 5>;
|
||||
};
|
||||
|
||||
/* Low-Voltage IO Control 2 */
|
||||
lvol_io74: lvol20 {
|
||||
lvols = <&scfg 0x07 4 2 0>;
|
||||
lvols = <&scfg 2 0>;
|
||||
};
|
||||
lvol_io73: lvol23 {
|
||||
lvols = <&scfg 0x07 3 2 3>;
|
||||
lvols = <&scfg 2 3>;
|
||||
};
|
||||
lvol_ioc1: lvol24 {
|
||||
lvols = <&scfg 0x0c 1 2 4>;
|
||||
lvols = <&scfg 2 4>;
|
||||
};
|
||||
lvol_ioc7: lvol25 {
|
||||
lvols = <&scfg 0x0c 7 2 5>;
|
||||
lvols = <&scfg 2 5>;
|
||||
};
|
||||
lvol_io34: lvol27 {
|
||||
lvols = <&scfg 0x03 4 2 7>;
|
||||
lvols = <&scfg 2 7>;
|
||||
};
|
||||
|
||||
/* Low-Voltage IO Control 3 */
|
||||
lvol_ioc6: lvol30 {
|
||||
lvols = <&scfg 0x0c 6 3 0>;
|
||||
lvols = <&scfg 3 0>;
|
||||
};
|
||||
lvol_io37: lvol31 {
|
||||
lvols = <&scfg 0x03 7 3 1>;
|
||||
lvols = <&scfg 3 1>;
|
||||
};
|
||||
lvol_io40: lvol32 {
|
||||
lvols = <&scfg 0x04 0 3 2>;
|
||||
lvols = <&scfg 3 2>;
|
||||
};
|
||||
lvol_io82: lvol34 {
|
||||
lvols = <&scfg 0x08 2 3 4>;
|
||||
lvols = <&scfg 3 4>;
|
||||
};
|
||||
lvol_io75: lvol35 {
|
||||
lvols = <&scfg 0x07 5 3 5>;
|
||||
lvols = <&scfg 3 5>;
|
||||
};
|
||||
lvol_io80: lvol36 {
|
||||
lvols = <&scfg 0x08 0 3 6>;
|
||||
lvols = <&scfg 3 6>;
|
||||
};
|
||||
lvol_ioc5: lvol37 {
|
||||
lvols = <&scfg 0x0c 5 3 7>;
|
||||
lvols = <&scfg 3 7>;
|
||||
};
|
||||
|
||||
/* Low-Voltage IO Control 4 */
|
||||
lvol_ioc2: lvol41 {
|
||||
lvols = <&scfg 0x0c 2 4 1>;
|
||||
lvols = <&scfg 4 1>;
|
||||
};
|
||||
lvol_iof3: lvol42 {
|
||||
lvols = <&scfg 0x0f 3 4 2>;
|
||||
lvols = <&scfg 4 2>;
|
||||
};
|
||||
lvol_iof2: lvol43 {
|
||||
lvols = <&scfg 0x0f 2 4 3>;
|
||||
lvols = <&scfg 4 3>;
|
||||
};
|
||||
lvol_iof5: lvol44 {
|
||||
lvols = <&scfg 0x0f 5 4 4>;
|
||||
lvols = <&scfg 4 4>;
|
||||
};
|
||||
lvol_iof4: lvol45 {
|
||||
lvols = <&scfg 0x0f 4 4 5>;
|
||||
lvols = <&scfg 4 5>;
|
||||
};
|
||||
lvol_ioe4: lvol46 {
|
||||
lvols = <&scfg 0x0e 4 4 6>;
|
||||
lvols = <&scfg 4 6>;
|
||||
};
|
||||
lvol_ioe3: lvol47 {
|
||||
lvols = <&scfg 0x0e 3 4 7>;
|
||||
lvols = <&scfg 4 7>;
|
||||
};
|
||||
|
||||
/* Low-Voltage IO Control 5 */
|
||||
lvol_io72: lvol50 {
|
||||
lvols = <&scfg 0x07 2 5 0>;
|
||||
lvols = <&scfg 5 0>;
|
||||
};
|
||||
lvol_io50: lvol53 {
|
||||
lvols = <&scfg 0x05 0 5 3>;
|
||||
lvols = <&scfg 5 3>;
|
||||
};
|
||||
|
||||
/*
|
||||
* Pseudo Low-Voltage IO Control (i.e. IO pad doesn't support
|
||||
* low voltage detection.)
|
||||
*/
|
||||
lvol_none: lvol-pseudo {
|
||||
lvols = <&scfg 6 0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
/* Low-Voltage IO Control 4 */
|
||||
lvol_io86: lvol40 {
|
||||
lvols = <&scfg 0x08 6 4 0>;
|
||||
lvols = <&scfg 4 0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
/* Low-Voltage IO Control 1 */
|
||||
lvol_io66: lvol17 {
|
||||
lvols = <&scfg 0x06 6 1 7>;
|
||||
lvols = <&scfg 1 7>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -103,81 +103,129 @@
|
|||
gpio0: gpio@40081000 {
|
||||
wui-maps = <&wui_io00 &wui_io01 &wui_io02 &wui_io03
|
||||
&wui_io04 &wui_io05 &wui_io06 &wui_io07>;
|
||||
|
||||
lvol-maps = <&lvol_io00 &lvol_none &lvol_none &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpio1: gpio@40083000 {
|
||||
wui-maps = <&wui_io10 &wui_io11 &wui_none &wui_none
|
||||
&wui_io14 &wui_io15 &wui_io16 &wui_io17>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_none &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpio2: gpio@40085000 {
|
||||
wui-maps = <&wui_io20 &wui_io21 &wui_io22 &wui_io23
|
||||
&wui_io24 &wui_io25 &wui_io26 &wui_io27>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_none &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpio3: gpio@40087000 {
|
||||
wui-maps = <&wui_io30 &wui_io31 &wui_none &wui_io33
|
||||
&wui_io34 &wui_none &wui_io36 &wui_io37>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_none &lvol_io33
|
||||
&lvol_io34 &lvol_none &lvol_io36 &lvol_io37>;
|
||||
};
|
||||
|
||||
gpio4: gpio@40089000 {
|
||||
wui-maps = <&wui_io40 &wui_io41 &wui_io42 &wui_io43
|
||||
&wui_io44 &wui_io45 &wui_io46 &wui_io47>;
|
||||
|
||||
lvol-maps = <&lvol_io40 &lvol_none &lvol_none &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpio5: gpio@4008b000 {
|
||||
wui-maps = <&wui_io50 &wui_io51 &wui_io52 &wui_io53
|
||||
&wui_io54 &wui_io55 &wui_io56 &wui_io57>;
|
||||
|
||||
lvol-maps = <&lvol_io50 &lvol_none &lvol_none &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpio6: gpio@4008d000 {
|
||||
wui-maps = <&wui_io60 &wui_io61 &wui_io62 &wui_io63
|
||||
&wui_io64 &wui_none &wui_none &wui_io67>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_none &lvol_none
|
||||
&lvol_io64 &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpio7: gpio@4008f000 {
|
||||
wui-maps = <&wui_io70 &wui_none &wui_io72 &wui_io73
|
||||
&wui_io74 &wui_io75 &wui_io76 &wui_none>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_io72 &lvol_io73
|
||||
&lvol_io74 &lvol_io75 &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpio8: gpio@40091000 {
|
||||
wui-maps = <&wui_io80 &wui_io81 &wui_io82 &wui_io83
|
||||
&wui_none &wui_none &wui_io86 &wui_io87>;
|
||||
|
||||
lvol-maps = <&lvol_io80 &lvol_none &lvol_io82 &lvol_none
|
||||
&lvol_none &lvol_none &lvol_io86 &lvol_io87>;
|
||||
};
|
||||
|
||||
gpio9: gpio@40093000 {
|
||||
wui-maps = <&wui_io90 &wui_io91 &wui_io92 &wui_io93
|
||||
&wui_io94 &wui_io95 &wui_io96 &wui_io97>;
|
||||
|
||||
lvol-maps = <&lvol_io90 &lvol_io91 &lvol_io92 &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpioa: gpio@40095000 {
|
||||
wui-maps = <&wui_ioa0 &wui_ioa1 &wui_ioa2 &wui_ioa3
|
||||
&wui_ioa4 &wui_ioa5 &wui_ioa6 &wui_ioa7>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_none &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpiob: gpio@40097000 {
|
||||
wui-maps = <&wui_iob0 &wui_iob1 &wui_iob2 &wui_iob3
|
||||
&wui_iob4 &wui_iob5 &wui_none &wui_iob7>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_iob2 &lvol_iob3
|
||||
&lvol_iob4 &lvol_iob5 &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpioc: gpio@40099000 {
|
||||
wui-maps = <&wui_ioc0 &wui_ioc1 &wui_ioc2 &wui_ioc3
|
||||
&wui_ioc4 &wui_ioc5 &wui_ioc6 &wui_ioc7>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_ioc1 &lvol_ioc2 &lvol_none
|
||||
&lvol_none &lvol_ioc5 &lvol_ioc6 &lvol_ioc7>;
|
||||
};
|
||||
|
||||
gpiod: gpio@4009b000 {
|
||||
wui-maps = <&wui_iod0 &wui_iod1 &wui_iod2 &wui_iod3
|
||||
&wui_iod4 &wui_iod5 &wui_none &wui_iod7>;
|
||||
|
||||
lvol-maps = <&lvol_iod0 &lvol_iod1 &lvol_none &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpioe: gpio@4009d000 {
|
||||
wui-maps = <&wui_ioe0 &wui_ioe1 &wui_ioe2 &wui_ioe3
|
||||
&wui_ioe4 &wui_ioe5 &wui_none &wui_none>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_none &lvol_ioe3
|
||||
&lvol_ioe4 &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpiof: gpio@4009f000 {
|
||||
wui-maps = <&wui_iof0 &wui_iof1 &wui_iof2 &wui_iof3
|
||||
&wui_iof4 &wui_iof5 &wui_none &wui_none>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_iof2 &lvol_iof3
|
||||
&lvol_iof4 &lvol_iof5 &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
/* ADC0 comparator configuration in npcx7 series */
|
||||
|
|
|
@ -125,81 +125,129 @@
|
|||
gpio0: gpio@40081000 {
|
||||
wui-maps = <&wui_io00 &wui_io01 &wui_io02 &wui_io03
|
||||
&wui_io04 &wui_io05 &wui_io06 &wui_io07>;
|
||||
|
||||
lvol-maps = <&lvol_io00 &lvol_none &lvol_none &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpio1: gpio@40083000 {
|
||||
wui-maps = <&wui_io10 &wui_io11 &wui_none &wui_none
|
||||
&wui_io14 &wui_io15 &wui_io16 &wui_io17>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_none &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpio2: gpio@40085000 {
|
||||
wui-maps = <&wui_io20 &wui_io21 &wui_io22 &wui_io23
|
||||
&wui_io24 &wui_io25 &wui_io26 &wui_io27>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_none &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpio3: gpio@40087000 {
|
||||
wui-maps = <&wui_io30 &wui_io31 &wui_none &wui_io33
|
||||
&wui_io34 &wui_none &wui_io36 &wui_io37>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_none &lvol_io33
|
||||
&lvol_io34 &lvol_none &lvol_io36 &lvol_io37>;
|
||||
};
|
||||
|
||||
gpio4: gpio@40089000 {
|
||||
wui-maps = <&wui_io40 &wui_io41 &wui_io42 &wui_io43
|
||||
&wui_io44 &wui_io45 &wui_io46 &wui_io47>;
|
||||
|
||||
lvol-maps = <&lvol_io40 &lvol_none &lvol_none &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpio5: gpio@4008b000 {
|
||||
wui-maps = <&wui_io50 &wui_io51 &wui_io52 &wui_io53
|
||||
&wui_io54 &wui_io55 &wui_io56 &wui_io57>;
|
||||
|
||||
lvol-maps = <&lvol_io50 &lvol_none &lvol_none &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpio6: gpio@4008d000 {
|
||||
wui-maps = <&wui_io60 &wui_io61 &wui_io62 &wui_io63
|
||||
&wui_io64 &wui_none &wui_io66 &wui_io67>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_none &lvol_none
|
||||
&lvol_io64 &lvol_none &lvol_io66 &lvol_none>;
|
||||
};
|
||||
|
||||
gpio7: gpio@4008f000 {
|
||||
wui-maps = <&wui_io70 &wui_none &wui_io72 &wui_io73
|
||||
&wui_io74 &wui_io75 &wui_io76 &wui_none>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_io72 &lvol_io73
|
||||
&lvol_io74 &lvol_io75 &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpio8: gpio@40091000 {
|
||||
wui-maps = <&wui_io80 &wui_io81 &wui_io82 &wui_io83
|
||||
&wui_none &wui_none &wui_none &wui_io87>;
|
||||
|
||||
lvol-maps = <&lvol_io80 &lvol_none &lvol_io82 &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_io87>;
|
||||
};
|
||||
|
||||
gpio9: gpio@40093000 {
|
||||
wui-maps = <&wui_io90 &wui_io91 &wui_io92 &wui_io93
|
||||
&wui_io94 &wui_io95 &wui_io96 &wui_io97>;
|
||||
|
||||
lvol-maps = <&lvol_io90 &lvol_io91 &lvol_io92 &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpioa: gpio@40095000 {
|
||||
wui-maps = <&wui_ioa0 &wui_ioa1 &wui_ioa2 &wui_ioa3
|
||||
&wui_ioa4 &wui_ioa5 &wui_ioa6 &wui_ioa7>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_none &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpiob: gpio@40097000 {
|
||||
wui-maps = <&wui_iob0 &wui_iob1 &wui_iob2 &wui_iob3
|
||||
&wui_iob4 &wui_iob5 &wui_iob6 &wui_iob7>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_iob2 &lvol_iob3
|
||||
&lvol_iob4 &lvol_iob5 &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpioc: gpio@40099000 {
|
||||
wui-maps = <&wui_ioc0 &wui_ioc1 &wui_ioc2 &wui_ioc3
|
||||
&wui_ioc4 &wui_ioc5 &wui_ioc6 &wui_ioc7>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_ioc1 &lvol_ioc2 &lvol_none
|
||||
&lvol_none &lvol_ioc5 &lvol_ioc6 &lvol_ioc7>;
|
||||
};
|
||||
|
||||
gpiod: gpio@4009b000 {
|
||||
wui-maps = <&wui_iod0 &wui_iod1 &wui_iod2 &wui_iod3
|
||||
&wui_iod4 &wui_iod5 &wui_none &wui_none>;
|
||||
|
||||
lvol-maps = <&lvol_iod0 &lvol_iod1 &lvol_none &lvol_none
|
||||
&lvol_none &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpioe: gpio@4009d000 {
|
||||
wui-maps = <&wui_ioe0 &wui_ioe1 &wui_ioe2 &wui_ioe3
|
||||
&wui_ioe4 &wui_ioe5 &wui_none &wui_none>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_none &lvol_ioe3
|
||||
&lvol_ioe4 &lvol_none &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
gpiof: gpio@4009f000 {
|
||||
wui-maps = <&wui_iof0 &wui_iof1 &wui_iof2 &wui_iof3
|
||||
&wui_iof4 &wui_iof5 &wui_none &wui_none>;
|
||||
|
||||
lvol-maps = <&lvol_none &lvol_none &lvol_iof2 &lvol_iof3
|
||||
&lvol_iof4 &lvol_iof5 &lvol_none &lvol_none>;
|
||||
};
|
||||
|
||||
/* ADC0 comparator configuration in npcx9 series */
|
||||
|
|
|
@ -28,6 +28,18 @@ properties:
|
|||
wui-maps = <&wui_io80 &wui_io81 &wui_io82 &wui_io83
|
||||
&wui_none &wui_none &wui_io86 &wui_io87>;
|
||||
|
||||
lvol-maps:
|
||||
type: phandles
|
||||
required: false
|
||||
description: |
|
||||
Mapping table between Low-Voltage controllers and 8 IOs belong to
|
||||
this device. Please notice not all IOs support Low-Voltage detection.
|
||||
In this case, it will be presented by lvol_none.
|
||||
|
||||
For example the LVOL mapping on NPCX7 GPIOC would be
|
||||
lvol-maps = <&lvol_none &lvol_ioc1 &lvol_ioc2 &lvol_none
|
||||
&lvol_none &lvol_ioc5 &lvol_ioc6 &lvol_ioc7>;
|
||||
|
||||
"#gpio-cells":
|
||||
const: 2
|
||||
|
||||
|
|
|
@ -27,7 +27,5 @@ alt-cells:
|
|||
- inv
|
||||
|
||||
lvol-cells:
|
||||
- io_port
|
||||
- io_bit
|
||||
- ctrl
|
||||
- bit
|
||||
|
|
|
@ -74,6 +74,24 @@ static void npcx_pinctrl_alt_sel(const struct npcx_alt *alt, int alt_func)
|
|||
}
|
||||
|
||||
/* Platform specific pin-control functions */
|
||||
void npcx_lvol_set_detect_level(int lvol_ctrl, int lvol_bit, bool enable)
|
||||
{
|
||||
const uintptr_t scfg_base = npcx_scfg_cfg.base_scfg;
|
||||
|
||||
if (enable) {
|
||||
NPCX_LV_GPIO_CTL(scfg_base, lvol_ctrl) |= BIT(lvol_bit);
|
||||
} else {
|
||||
NPCX_LV_GPIO_CTL(scfg_base, lvol_ctrl) &= ~BIT(lvol_bit);
|
||||
}
|
||||
}
|
||||
|
||||
bool npcx_lvol_get_detect_level(int lvol_ctrl, int lvol_bit)
|
||||
{
|
||||
const uintptr_t scfg_base = npcx_scfg_cfg.base_scfg;
|
||||
|
||||
return NPCX_LV_GPIO_CTL(scfg_base, lvol_ctrl) & BIT(lvol_bit);
|
||||
}
|
||||
|
||||
void npcx_pinctrl_i2c_port_sel(int controller, int port)
|
||||
{
|
||||
struct glue_reg *const inst_glue = HAL_GLUE_INST();
|
||||
|
|
|
@ -333,6 +333,48 @@
|
|||
1), \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Construct a npcx_lvol structure from 'lvol-maps' property at index 'i'.
|
||||
*
|
||||
* @param node_id Node identifier.
|
||||
* @param prop Low voltage configurations property name. (i.e. 'lvol-maps')
|
||||
* @param idx Property entry index.
|
||||
*/
|
||||
#define NPCX_DT_LVOL_CTRL_NONE \
|
||||
DT_PHA(DT_NODELABEL(lvol_none), lvols, ctrl)
|
||||
|
||||
/**
|
||||
* @brief Length of npcx_lvol structures in 'lvol-maps' property
|
||||
*
|
||||
* @param inst instance number for compatible defined in DT_DRV_COMPAT.
|
||||
* @return length of 'lvol-maps' prop which type is 'phandles'
|
||||
*/
|
||||
#define NPCX_DT_LVOL_ITEMS_LEN(inst) DT_INST_PROP_LEN(inst, lvol_maps)
|
||||
|
||||
/**
|
||||
* @brief Construct a npcx_lvol structure from 'lvol-maps' property at index 'i'.
|
||||
*
|
||||
* @param node_id Node identifier.
|
||||
* @param prop Low voltage configurations property name. (i.e. 'lvol-maps')
|
||||
* @param idx Property entry index.
|
||||
*/
|
||||
#define NPCX_DT_LVOL_ITEMS_INIT(node_id, prop, idx) \
|
||||
{ \
|
||||
.ctrl = DT_PHA(DT_PROP_BY_IDX(node_id, prop, idx), lvols, ctrl), \
|
||||
.bit = DT_PHA(DT_PROP_BY_IDX(node_id, prop, idx), lvols, bit), \
|
||||
},
|
||||
|
||||
/**
|
||||
* @brief Macro function to construct a list of npcx_lvol items from 'lvol-maps'
|
||||
* property.
|
||||
*
|
||||
* @param inst instance number for compatible defined in DT_DRV_COMPAT.
|
||||
* @return an array of npcx_lvol items.
|
||||
*/
|
||||
#define NPCX_DT_LVOL_ITEMS_LIST(inst) { \
|
||||
DT_FOREACH_PROP_ELEM(DT_DRV_INST(inst), lvol_maps, \
|
||||
NPCX_DT_LVOL_ITEMS_INIT)}
|
||||
|
||||
/**
|
||||
* @brief Check if the host interface type is automatically configured by
|
||||
* booter.
|
||||
|
|
|
@ -35,10 +35,8 @@ struct npcx_alt {
|
|||
* low-voltage detection.
|
||||
*/
|
||||
struct npcx_lvol {
|
||||
uint16_t io_port:5; /** A io pad's port which support low-voltage. */
|
||||
uint16_t io_bit:3; /** A io pad's bit which support low-voltage. */
|
||||
uint16_t ctrl:5; /** Related register index for low-voltage conf. */
|
||||
uint16_t bit:3; /** Related register bit for low-voltage conf. */
|
||||
uint8_t ctrl:5; /** Related register index for low-voltage conf. */
|
||||
uint8_t bit:3; /** Related register bit for low-voltage conf. */
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -62,6 +60,24 @@ int npcx_pinctrl_flash_write_protect_set(void);
|
|||
*/
|
||||
bool npcx_pinctrl_flash_write_protect_is_set(void);
|
||||
|
||||
/**
|
||||
* @brief Enable low-voltage input detection
|
||||
*
|
||||
* @param lvol_ctrl Related register index for low-voltage detection
|
||||
* @param lvol_bit Related register bit for low-voltage detection
|
||||
* @param enable True to enable low-voltage input detection, false to disable.
|
||||
*/
|
||||
void npcx_lvol_set_detect_level(int lvol_ctrl, int lvol_bit, bool enable);
|
||||
|
||||
/**
|
||||
* @brief Get status of low-voltage input detection
|
||||
*
|
||||
* @param lvol_ctrl Related register index for low-voltage detection
|
||||
* @param lvol_bit Related register bit for low-voltage detection
|
||||
* @return True means the low-voltage power supply is enabled, otherwise disabled.
|
||||
*/
|
||||
bool npcx_lvol_get_detect_level(int lvol_ctrl, int lvol_bit);
|
||||
|
||||
/**
|
||||
* @brief Select the host interface type
|
||||
*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue