drivers: pinctrl: make ti_k3 multi-instance
Some devices have multiple pinctrl regions; for instance, main pinctrl and mcu pinctrl. Currently there can only be a single pinctrl instance picked form a DT label. This patch makes the pinctrl driver initialise one instance for each node with correct compatible string. Signed-off-by: Amneesh Singh <a-singh7@ti.com>
This commit is contained in:
parent
c2d52c7f4b
commit
9814590eb3
2 changed files with 16 additions and 16 deletions
|
@ -9,22 +9,18 @@
|
|||
#include <zephyr/arch/cpu.h>
|
||||
#include <zephyr/drivers/pinctrl.h>
|
||||
|
||||
#define PINCTRL_NODE DT_NODELABEL(pinctrl)
|
||||
|
||||
static struct pinctrl_ti_k3_dev_data {
|
||||
struct pinctrl_ti_k3_data {
|
||||
DEVICE_MMIO_RAM;
|
||||
} pinctrl_ti_k3_dev;
|
||||
};
|
||||
|
||||
static struct pinctrl_ti_k3_cfg_data {
|
||||
struct pinctrl_ti_k3_cfg {
|
||||
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);
|
||||
const struct device *dev = pins->dev;
|
||||
uintptr_t virt_reg_base = DEVICE_MMIO_GET(dev);
|
||||
|
||||
for (uint8_t i = 0; i < pin_cnt; i++) {
|
||||
|
@ -40,11 +36,13 @@ static int pinctrl_ti_k3_init(const struct device *dev)
|
|||
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);
|
||||
#define PINCTRL_TI_K3_INIT(n) \
|
||||
static struct pinctrl_ti_k3_data pinctrl_ti_k3_data_##n; \
|
||||
static struct pinctrl_ti_k3_cfg pinctrl_ti_k3_cfg_##n = { \
|
||||
DEVICE_MMIO_ROM_INIT(DT_DRV_INST(n)), \
|
||||
}; \
|
||||
DEVICE_DT_INST_DEFINE(n, &pinctrl_ti_k3_init, NULL, &pinctrl_ti_k3_data_##n, \
|
||||
&pinctrl_ti_k3_cfg_##n, PRE_KERNEL_1, \
|
||||
CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, NULL);
|
||||
|
||||
DT_INST_FOREACH_STATUS_OKAY(PINCTRL_TI_K3_INIT)
|
||||
|
|
|
@ -15,6 +15,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
struct pinctrl_soc_pin {
|
||||
const struct device *dev;
|
||||
uint32_t offset;
|
||||
uint32_t value;
|
||||
};
|
||||
|
@ -23,6 +24,7 @@ typedef struct pinctrl_soc_pin pinctrl_soc_pin_t;
|
|||
|
||||
#define TI_K3_DT_PIN(node_id) \
|
||||
{ \
|
||||
.dev = DEVICE_DT_GET(DT_PARENT(node_id)), \
|
||||
.offset = DT_PROP_BY_IDX(node_id, pinmux, 0), \
|
||||
.value = DT_PROP_BY_IDX(node_id, pinmux, 1) \
|
||||
},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue