drivers: pinctrl: Add pinctrl support for TI K3 devices
K3 is a common architecture used between different TI processor families Signed-off-by: Grant Ramsay <gramsay@enphaseenergy.com>
This commit is contained in:
parent
b1415c57e1
commit
026105c883
6 changed files with 145 additions and 0 deletions
|
@ -29,3 +29,4 @@ zephyr_library_sources_ifdef(CONFIG_PINCTRL_SMARTBOND pinctrl_smartbond.c)
|
||||||
zephyr_library_sources_ifdef(CONFIG_PINCTRL_XMC4XXX pinctrl_xmc4xxx.c)
|
zephyr_library_sources_ifdef(CONFIG_PINCTRL_XMC4XXX pinctrl_xmc4xxx.c)
|
||||||
zephyr_library_sources_ifdef(CONFIG_PINCTRL_NXP_S32 pinctrl_nxp_s32.c)
|
zephyr_library_sources_ifdef(CONFIG_PINCTRL_NXP_S32 pinctrl_nxp_s32.c)
|
||||||
zephyr_library_sources_ifdef(CONFIG_PINCTRL_GECKO pinctrl_gecko.c)
|
zephyr_library_sources_ifdef(CONFIG_PINCTRL_GECKO pinctrl_gecko.c)
|
||||||
|
zephyr_library_sources_ifdef(CONFIG_PINCTRL_TI_K3 pinctrl_ti_k3.c)
|
||||||
|
|
|
@ -58,5 +58,6 @@ source "drivers/pinctrl/Kconfig.smartbond"
|
||||||
source "drivers/pinctrl/Kconfig.xmc4xxx"
|
source "drivers/pinctrl/Kconfig.xmc4xxx"
|
||||||
source "drivers/pinctrl/Kconfig.nxp_s32"
|
source "drivers/pinctrl/Kconfig.nxp_s32"
|
||||||
source "drivers/pinctrl/Kconfig.gecko"
|
source "drivers/pinctrl/Kconfig.gecko"
|
||||||
|
source "drivers/pinctrl/Kconfig.ti_k3"
|
||||||
|
|
||||||
endif # PINCTRL
|
endif # PINCTRL
|
||||||
|
|
9
drivers/pinctrl/Kconfig.ti_k3
Normal file
9
drivers/pinctrl/Kconfig.ti_k3
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# Copyright (c) 2023 Enphase Energy
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
config PINCTRL_TI_K3
|
||||||
|
bool "TI K3 pinctrl driver"
|
||||||
|
default y
|
||||||
|
depends on DT_HAS_TI_K3_PINCTRL_ENABLED
|
||||||
|
help
|
||||||
|
Enable the TI K3 pinctrl driver
|
50
drivers/pinctrl/pinctrl_ti_k3.c
Normal file
50
drivers/pinctrl/pinctrl_ti_k3.c
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 Enphase Energy
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define DT_DRV_COMPAT ti_k3_pinctrl
|
||||||
|
|
||||||
|
#include <zephyr/arch/cpu.h>
|
||||||
|
#include <zephyr/drivers/pinctrl.h>
|
||||||
|
|
||||||
|
#define PINCTRL_NODE DT_NODELABEL(pinctrl)
|
||||||
|
|
||||||
|
static struct pinctrl_ti_k3_dev_data {
|
||||||
|
DEVICE_MMIO_RAM;
|
||||||
|
} pinctrl_ti_k3_dev;
|
||||||
|
|
||||||
|
static struct pinctrl_ti_k3_cfg_data {
|
||||||
|
DEVICE_MMIO_ROM;
|
||||||
|
} pinctrl_ti_k3_cfg = {
|
||||||
|
DEVICE_MMIO_ROM_INIT(PINCTRL_NODE)
|
||||||
|
};
|
||||||
|
|
||||||
|
int pinctrl_configure_pins(const pinctrl_soc_pin_t *pins, uint8_t pin_cnt, uintptr_t reg)
|
||||||
|
{
|
||||||
|
ARG_UNUSED(reg);
|
||||||
|
const struct device *dev = DEVICE_DT_GET(PINCTRL_NODE);
|
||||||
|
uintptr_t virt_reg_base = DEVICE_MMIO_GET(dev);
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < pin_cnt; i++) {
|
||||||
|
sys_write32(pins[i].value, virt_reg_base + pins[i].offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int pinctrl_ti_k3_init(const struct device *dev)
|
||||||
|
{
|
||||||
|
DEVICE_MMIO_MAP(dev, K_MEM_CACHE_NONE);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEVICE_DT_DEFINE(PINCTRL_NODE,
|
||||||
|
pinctrl_ti_k3_init,
|
||||||
|
NULL,
|
||||||
|
&pinctrl_ti_k3_dev,
|
||||||
|
&pinctrl_ti_k3_cfg,
|
||||||
|
PRE_KERNEL_1,
|
||||||
|
CONFIG_KERNEL_INIT_PRIORITY_DEFAULT,
|
||||||
|
NULL);
|
39
dts/bindings/pinctrl/ti,k3-pinctrl.yaml
Normal file
39
dts/bindings/pinctrl/ti,k3-pinctrl.yaml
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
# Copyright (c) 2023 Enphase Energy
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
description: |
|
||||||
|
TI K3 pinctrl node.
|
||||||
|
|
||||||
|
Pins can be configured using the following macro "K3_PINMUX(offset, value, mux_mode)".
|
||||||
|
offset - the pin attribute register offset from the base address.
|
||||||
|
value - one of the following:
|
||||||
|
PIN_OUTPUT
|
||||||
|
PIN_OUTPUT_PULLUP
|
||||||
|
PIN_OUTPUT_PULLDOWN
|
||||||
|
PIN_INPUT
|
||||||
|
PIN_INPUT_PULLUP
|
||||||
|
PIN_INPUT_PULLDOWN
|
||||||
|
mux_mode - The mux mode for the pin, MUX_MODE_0 -> MUX_MODE_9.
|
||||||
|
e.g. for AM62x the pinctrl base address is 0xf4000.
|
||||||
|
The default UART0_RX pin is located at 0x000f41c8 (mux mode 0).
|
||||||
|
So the configuration would be "K3_PINMUX(0x1c8, PIN_INPUT, MUX_MODE_0)".
|
||||||
|
|
||||||
|
compatible: "ti,k3-pinctrl"
|
||||||
|
|
||||||
|
include: base.yaml
|
||||||
|
|
||||||
|
properties:
|
||||||
|
reg:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
child-binding:
|
||||||
|
description: |
|
||||||
|
This binding gives a base representation of the TI K3
|
||||||
|
pin configuration.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
pinmux:
|
||||||
|
required: true
|
||||||
|
type: array
|
||||||
|
description: |
|
||||||
|
TI K3 pin configuration.
|
45
include/zephyr/dt-bindings/pinctrl/ti-k3-pinctrl.h
Normal file
45
include/zephyr/dt-bindings/pinctrl/ti-k3-pinctrl.h
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 Enphase Energy
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_TI_K3_PINCTRL_H_
|
||||||
|
#define ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_TI_K3_PINCTRL_H_
|
||||||
|
|
||||||
|
#define PULLUDEN_SHIFT 16
|
||||||
|
#define PULLTYPESEL_SHIFT 17
|
||||||
|
#define RXACTIVE_SHIFT 18
|
||||||
|
|
||||||
|
#define PULL_DISABLE (1 << PULLUDEN_SHIFT)
|
||||||
|
#define PULL_ENABLE (0 << PULLUDEN_SHIFT)
|
||||||
|
|
||||||
|
#define PULL_UP ((1 << PULLTYPESEL_SHIFT) | PULL_ENABLE)
|
||||||
|
#define PULL_DOWN ((0 << PULLTYPESEL_SHIFT) | PULL_ENABLE)
|
||||||
|
|
||||||
|
#define INPUT_ENABLE (1 << RXACTIVE_SHIFT)
|
||||||
|
#define INPUT_DISABLE (0 << RXACTIVE_SHIFT)
|
||||||
|
|
||||||
|
/* Only the following macros are intended be used in DTS files */
|
||||||
|
|
||||||
|
#define PIN_OUTPUT (INPUT_DISABLE | PULL_DISABLE)
|
||||||
|
#define PIN_OUTPUT_PULLUP (INPUT_DISABLE | PULL_UP)
|
||||||
|
#define PIN_OUTPUT_PULLDOWN (INPUT_DISABLE | PULL_DOWN)
|
||||||
|
#define PIN_INPUT (INPUT_ENABLE | PULL_DISABLE)
|
||||||
|
#define PIN_INPUT_PULLUP (INPUT_ENABLE | PULL_UP)
|
||||||
|
#define PIN_INPUT_PULLDOWN (INPUT_ENABLE | PULL_DOWN)
|
||||||
|
|
||||||
|
#define MUX_MODE_0 0
|
||||||
|
#define MUX_MODE_1 1
|
||||||
|
#define MUX_MODE_2 2
|
||||||
|
#define MUX_MODE_3 3
|
||||||
|
#define MUX_MODE_4 4
|
||||||
|
#define MUX_MODE_5 5
|
||||||
|
#define MUX_MODE_6 6
|
||||||
|
#define MUX_MODE_7 7
|
||||||
|
#define MUX_MODE_8 8
|
||||||
|
#define MUX_MODE_9 9
|
||||||
|
|
||||||
|
#define K3_PINMUX(offset, value, mux_mode) (((offset) & 0x1fff)) ((value) | (mux_mode))
|
||||||
|
|
||||||
|
#endif /* ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_TI_K3_PINCTRL_H_ */
|
Loading…
Add table
Add a link
Reference in a new issue