Skip to content

Commit fc22fc9

Browse files
author
Tavish Naruka
committed
drivers: pinctrl: add tms570 driver
Adds driver for TI TMS570 SoC. Signed-off-by: Tavish Naruka <[email protected]>
1 parent 34146bb commit fc22fc9

File tree

8 files changed

+113
-0
lines changed

8 files changed

+113
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
CONFIG_PINCTRL=y
3+
CONFIG_PINCTRL_TI_TMS570=y

drivers/pinctrl/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ zephyr_library_sources_ifdef(CONFIG_PINCTRL_GECKO pinctrl_gecko.c)
3737
zephyr_library_sources_ifdef(CONFIG_PINCTRL_SILABS_SIWX91X pinctrl_silabs_siwx91x.c)
3838
zephyr_library_sources_ifdef(CONFIG_PINCTRL_SILABS_DBUS pinctrl_silabs_dbus.c)
3939
zephyr_library_sources_ifdef(CONFIG_PINCTRL_TI_K3 pinctrl_ti_k3.c)
40+
zephyr_library_sources_ifdef(CONFIG_PINCTRL_TI_TMS570 pinctrl_ti_tms570.c)
4041
zephyr_library_sources_ifdef(CONFIG_PINCTRL_EMSDP pinctrl_emsdp.c)
4142
zephyr_library_sources_ifdef(CONFIG_PINCTRL_TI_CC32XX pinctrl_ti_cc32xx.c)
4243
zephyr_library_sources_ifdef(CONFIG_PINCTRL_NUMAKER pinctrl_numaker.c)

drivers/pinctrl/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ source "drivers/pinctrl/Kconfig.siwx91x"
6767
source "drivers/pinctrl/Kconfig.ti_k3"
6868
source "drivers/pinctrl/Kconfig.emsdp"
6969
source "drivers/pinctrl/Kconfig.ti_cc32xx"
70+
source "drivers/pinctrl/Kconfig.ti_tms570"
7071
source "drivers/pinctrl/Kconfig.numaker"
7172
source "drivers/pinctrl/Kconfig.eos_s3"
7273
source "drivers/pinctrl/Kconfig.mci_io_mux"

drivers/pinctrl/Kconfig.ti_tms570

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Copyright (c) 2025 ispace, inc.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
config PINCTRL_TI_TMS570
5+
bool "TI TMS570 pinctrl driver"
6+
default y
7+
depends on DT_HAS_TI_TMS570_PINMUX_ENABLED
8+
help
9+
Enable the TI TMS570 pinmux driver
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright (c) 2025 ispace, inc.
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <zephyr/arch/cpu.h>
8+
#include <zephyr/drivers/pinctrl.h>
9+
10+
#define DT_DRV_COMPAT ti_tms570_pinmux
11+
#define DRV_REG_ADDR DT_INST_REG_ADDR(0)
12+
13+
#define REG_KICK0_OFFSET (0x38)
14+
#define REG_KICK1_OFFSET (0x3C)
15+
16+
/* value used to unlock */
17+
#define KICK0_VALUE (0x83E70B13)
18+
#define KICK1_VALUE (0x95A4F1E0)
19+
20+
#define REG_PINMMR_0_OFFSET (0x110)
21+
22+
int pinctrl_configure_pins(const pinctrl_soc_pin_t *pins, uint8_t pin_cnt, uintptr_t reg)
23+
{
24+
uint32_t nibble_start;
25+
uint32_t mask;
26+
ARG_UNUSED(reg);
27+
28+
/* unlock */
29+
sys_write32(KICK0_VALUE, DRV_REG_ADDR + REG_KICK0_OFFSET);
30+
sys_write32(KICK1_VALUE, DRV_REG_ADDR + REG_KICK1_OFFSET);
31+
32+
for (uint8_t i = 0; i < pin_cnt; i++) {
33+
nibble_start = (pins[i].bit / 4) * 4;
34+
mask = 0xff << nibble_start;
35+
sys_write32(mask & BIT(pins[i].bit), DRV_REG_ADDR + REG_PINMMR_0_OFFSET + (pins[i].pinmmr * 4));
36+
}
37+
38+
/* lock */
39+
sys_write32(0, DRV_REG_ADDR + REG_KICK0_OFFSET);
40+
sys_write32(0, DRV_REG_ADDR + REG_KICK1_OFFSET);
41+
42+
return 0;
43+
}

dts/arm/ti/tms570.dtsi

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,5 +67,10 @@
6767
};
6868
};
6969

70+
pinctrl: pin-controller@ffff1c00 {
71+
compatible = "ti,tms570-pinmux";
72+
reg = <0xffff1c00 0x400>;
73+
status = "okay";
74+
};
7075
};
7176
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Copyright (c) 2025 ispace, inc.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
description: TI TMS570 pinmux driver
5+
6+
compatible: "ti,tms570-pinmux"
7+
8+
include: base.yaml
9+
10+
properties:
11+
reg:
12+
required: true
13+
14+
child-binding:
15+
properties:
16+
pinmux:
17+
required: true
18+
type: array
19+
description: |
20+
TMS570 pin's configuration (select bit pair) based on the "Output Multiplexing" table in the reference manual.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Copyright 2025 ispace, inc.
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#ifndef ZEPHYR_SOC_TI_TMS570_PINCTRL_SOC_H_
8+
#define ZEPHYR_SOC_TI_TMS570_PINCTRL_SOC_H_
9+
10+
#include <zephyr/devicetree.h>
11+
#include <zephyr/types.h>
12+
13+
typedef struct pinctrl_soc_pin_t {
14+
uint8_t pinmmr;
15+
uint8_t bit;
16+
} pinctrl_soc_pin_t;
17+
18+
#define TI_TMS570_DT_PIN(node_id) \
19+
{ \
20+
.pinmmr = DT_PROP_BY_IDX(node_id, pinmux, 0), \
21+
.bit = DT_PROP_BY_IDX(node_id, pinmux, 1) \
22+
},
23+
24+
#define Z_PINCTRL_STATE_PIN_INIT(node_id, prop, idx) \
25+
TI_TMS570_DT_PIN(DT_PROP_BY_IDX(node_id, prop, idx))
26+
27+
#define Z_PINCTRL_STATE_PINS_INIT(node_id, prop) \
28+
{ DT_FOREACH_PROP_ELEM(node_id, prop, Z_PINCTRL_STATE_PIN_INIT) }
29+
30+
31+
#endif /* ZEPHYR_SOC_TI_TMS570_PINCTRL_SOC_H_ */

0 commit comments

Comments
 (0)