drivers: pinctrl: add pinctrl drivers for arm v2m_beetle
Adds pinctrl driver for the v2m_beetle board target. Signed-off-by: Samuel Chee <samche01@arm.com> Signed-off-by: Sudan Landge <sudan.landge@arm.com>
This commit is contained in:
parent
7b6993ffe8
commit
7e95006abf
7 changed files with 195 additions and 0 deletions
|
@ -8,6 +8,7 @@ zephyr_library_sources_ifdef(CONFIG_PINCTRL_TELINK_B91 pinctrl_b91.c)
|
|||
zephyr_library_sources_ifdef(CONFIG_PINCTRL_AMBIQ pinctrl_ambiq.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_PINCTRL_ARM_MPS2 pinctrl_arm_mps2.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_PINCTRL_ARM_MPS3 pinctrl_arm_mps3.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_PINCTRL_ARM_V2M_BEETLE pinctrl_arm_v2m_beetle.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_PINCTRL_GD32_AF pinctrl_gd32_af.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_PINCTRL_GD32_AFIO pinctrl_gd32_afio.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_PINCTRL_ITE_IT8XXX2 pinctrl_ite_it8xxx2.c)
|
||||
|
|
|
@ -38,6 +38,7 @@ source "drivers/pinctrl/Kconfig.b91"
|
|||
source "drivers/pinctrl/Kconfig.ambiq"
|
||||
source "drivers/pinctrl/Kconfig.arm_mps2"
|
||||
source "drivers/pinctrl/Kconfig.arm_mps3"
|
||||
source "drivers/pinctrl/Kconfig.arm_v2m_beetle"
|
||||
source "drivers/pinctrl/Kconfig.gd32"
|
||||
source "drivers/pinctrl/Kconfig.it8xxx2"
|
||||
source "drivers/pinctrl/Kconfig.npcx"
|
||||
|
|
9
drivers/pinctrl/Kconfig.arm_v2m_beetle
Normal file
9
drivers/pinctrl/Kconfig.arm_v2m_beetle
Normal file
|
@ -0,0 +1,9 @@
|
|||
# Copyright 2025 Arm Limited and/or its affiliates <open-source-office@arm.com>
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
config PINCTRL_ARM_V2M_BEETLE
|
||||
bool "Arm V2M Beetle pin controller driver"
|
||||
default y
|
||||
depends on DT_HAS_ARM_V2M_BEETLE_PINCTRL_ENABLED
|
||||
help
|
||||
Arm MPS2 V2M Beetle driver
|
44
drivers/pinctrl/pinctrl_arm_v2m_beetle.c
Normal file
44
drivers/pinctrl/pinctrl_arm_v2m_beetle.c
Normal file
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Copyright 2025 Arm Limited and/or its affiliates <open-source-office@arm.com>
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include "zephyr/device.h"
|
||||
#include "zephyr/drivers/gpio.h"
|
||||
#include <zephyr/drivers/pinctrl.h>
|
||||
#include <zephyr/devicetree/gpio.h>
|
||||
#include <zephyr/drivers/gpio/gpio_cmsdk_ahb.h>
|
||||
|
||||
#define EXPANSION_SHIELD_POWER_ENABLE_MASK BIT(15)
|
||||
|
||||
static const struct device *const gpio_ports[] = {DEVICE_DT_GET_OR_NULL(DT_NODELABEL(gpio0)),
|
||||
DEVICE_DT_GET_OR_NULL(DT_NODELABEL(gpio1))};
|
||||
|
||||
static int pinctrl_configure_pin(const pinctrl_soc_pin_t *pin)
|
||||
{
|
||||
uint32_t flags = pin->input_enable ? GPIO_INPUT : GPIO_OUTPUT;
|
||||
|
||||
/* Each gpio has 16 pins, so divide by 16 to get specific gpio*/
|
||||
const struct device *gpio_dev = gpio_ports[pin->pin_num >> 4];
|
||||
|
||||
return cmsdk_ahb_gpio_config(gpio_dev, pin->pin_num % 16, flags);
|
||||
}
|
||||
|
||||
int pinctrl_configure_pins(const pinctrl_soc_pin_t *pins, uint8_t pin_cnt, uintptr_t reg)
|
||||
{
|
||||
ARG_UNUSED(reg);
|
||||
for (uint8_t i = 0U; i < pin_cnt; i++) {
|
||||
if (pinctrl_configure_pin(pins++) == -ENOTSUP) {
|
||||
return -ENOTSUP;
|
||||
}
|
||||
}
|
||||
|
||||
const struct gpio_cmsdk_ahb_cfg *const cfg = gpio_ports[1]->config;
|
||||
/* Set the ARD_PWR_EN GPIO1[15] as an output */
|
||||
cfg->port->outenableset |= EXPANSION_SHIELD_POWER_ENABLE_MASK;
|
||||
/* Set on 3v3 (for ARDUINO HDR compliance) */
|
||||
cfg->port->data |= EXPANSION_SHIELD_POWER_ENABLE_MASK;
|
||||
|
||||
return 0;
|
||||
}
|
40
dts/bindings/pinctrl/arm,v2m_beetle-pinctrl.yaml
Normal file
40
dts/bindings/pinctrl/arm,v2m_beetle-pinctrl.yaml
Normal file
|
@ -0,0 +1,40 @@
|
|||
# Copyright 2025 Arm Limited and/or its affiliates <open-source-office@arm.com>
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
description: |
|
||||
The node has the 'pinctrl' node label set in your SoC's devicetree,
|
||||
so you can modify it like this:
|
||||
|
||||
&pinctrl {
|
||||
/* your modifications go here */
|
||||
};
|
||||
|
||||
All device pin configurations should be placed in child nodes of the
|
||||
'pinctrl' node, as shown in this example:
|
||||
|
||||
/* You can put this in places like a board-pinctrl.dtsi file in
|
||||
* your board directory, or a devicetree overlay in your application.
|
||||
*/
|
||||
|
||||
compatible: "arm,v2m_beetle-pinctrl"
|
||||
|
||||
include: base.yaml
|
||||
|
||||
child-binding:
|
||||
description: |
|
||||
Definitions for a pinctrl state.
|
||||
child-binding:
|
||||
|
||||
include:
|
||||
- name: pincfg-node.yaml
|
||||
property-allowlist:
|
||||
- input-enable
|
||||
|
||||
properties:
|
||||
pinmux:
|
||||
required: true
|
||||
type: array
|
||||
description: |
|
||||
An array of pins sharing the same group properties. Each
|
||||
element of the array is an integer constructed from the
|
||||
pin number and the alternative function of the pin.
|
49
include/zephyr/dt-bindings/pinctrl/arm-v2m_beetle-pinctrl.h
Normal file
49
include/zephyr/dt-bindings/pinctrl/arm-v2m_beetle-pinctrl.h
Normal file
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* Copyright 2025 Arm Limited and/or its affiliates <open-source-office@arm.com>
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#define V2M_BEETLE_ALT_FUNC_POS 0
|
||||
#define V2M_BEETLE_ALT_FUNC_MASK 0x7
|
||||
|
||||
#define V2M_BEETLE_EXP_NUM_POS 3
|
||||
#define V2M_BEETLE_EXP_NUM_MASK 0x1F8
|
||||
|
||||
#define V2M_BEETLE_PINCTRL_FUNC_UART 0
|
||||
#define V2M_BEETLE_PINCTRL_FUNC_GPIO 1
|
||||
#define V2M_BEETLE_PINCTRL_FUNC_I2C 2
|
||||
#define V2M_BEETLE_PINCTRL_FUNC_SPI 3
|
||||
#define V2M_BEETLE_PINCTRL_FUNC_QSPI 4
|
||||
|
||||
#define V2M_BEETLE_PINMUX(alt_func, exp_num) (exp_num << V2M_BEETLE_EXP_NUM_POS | \
|
||||
alt_func << V2M_BEETLE_ALT_FUNC_POS)
|
||||
|
||||
|
||||
|
||||
/* GPIO 0 */
|
||||
#define UART0_RXD_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_UART, 0)
|
||||
#define UART0_TXD_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_UART, 1)
|
||||
#define SPI0_SS_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_SPI, 10)
|
||||
#define SPI0_MOSI_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_SPI, 11)
|
||||
#define SPI0_MISO_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_SPI, 12)
|
||||
#define SPI0_SCK_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_SPI, 13)
|
||||
#define SBCON0_SDA_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_I2C, 14)
|
||||
#define SBCON0_SCL_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_I2C, 15)
|
||||
|
||||
/* GPIO 1 */
|
||||
#define UART1_RXD_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_UART, 16)
|
||||
#define UART1_TXD_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_UART, 17)
|
||||
#define SPI1_SS_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_SPI, 18)
|
||||
#define SPI1_MOSI_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_SPI, 19)
|
||||
#define SPI1_MISO_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_SPI, 20)
|
||||
#define SPI1_SCK_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_SPI, 21)
|
||||
#define SBCON1_SDA_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_I2C, 22)
|
||||
#define SBCON1_SCL_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_I2C, 23)
|
||||
#define QSPI_CS2_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_QSPI, 24)
|
||||
#define QSPI_CS1_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_QSPI, 25)
|
||||
#define QSPI_IOF0_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_QSPI, 26)
|
||||
#define QSPI_IOF1_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_QSPI, 27)
|
||||
#define QSPI_IOF2_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_QSPI, 28)
|
||||
#define QSPI_IOF3_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_QSPI, 29)
|
||||
#define QSPI_SCK_EXP V2M_BEETLE_PINMUX(V2M_BEETLE_PINCTRL_FUNC_QSPI, 30)
|
51
soc/arm/beetle/pinctrl_soc.h
Normal file
51
soc/arm/beetle/pinctrl_soc.h
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* Copyright 2025 Arm Limited and/or its affiliates <open-source-office@arm.com>
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <zephyr/dt-bindings/pinctrl/arm-v2m_beetle-pinctrl.h>
|
||||
|
||||
/**
|
||||
* @brief Type to hold a pin's pinctrl configuration.
|
||||
*/
|
||||
struct beetle_pinctrl_soc_pin {
|
||||
/** Pin number 0..52 */
|
||||
uint32_t pin_num : 6;
|
||||
/** Alternative function (UART, SPI, etc.) */
|
||||
uint32_t alt_func : 3;
|
||||
/** Enable the pin as an input */
|
||||
uint32_t input_enable : 1;
|
||||
};
|
||||
|
||||
typedef struct beetle_pinctrl_soc_pin pinctrl_soc_pin_t;
|
||||
|
||||
/**
|
||||
* @brief Utility macro to initialize each pin.
|
||||
*
|
||||
* @param node_id Node identifier.
|
||||
* @param prop Property name.
|
||||
* @param idx Property entry index.
|
||||
*/
|
||||
#define Z_PINCTRL_STATE_PIN_INIT(node_id, prop, idx) \
|
||||
{ \
|
||||
BEETLE_GET_PIN_NUM(DT_PROP_BY_IDX(node_id, prop, idx)), \
|
||||
BEETLE_GET_PIN_ALT_FUNC(DT_PROP_BY_IDX(node_id, prop, idx)), \
|
||||
DT_PROP(node_id, input_enable), \
|
||||
},
|
||||
|
||||
/**
|
||||
* @brief Utility macro to initialize state pins contained in a given property.
|
||||
*
|
||||
* @param node_id Node identifier.
|
||||
* @param prop Property name describing state pins.
|
||||
*/
|
||||
#define Z_PINCTRL_STATE_PINS_INIT(node_id, prop) \
|
||||
{DT_FOREACH_CHILD_VARGS(DT_PHANDLE(node_id, prop), \
|
||||
DT_FOREACH_PROP_ELEM, pinmux, \
|
||||
Z_PINCTRL_STATE_PIN_INIT)}
|
||||
|
||||
#define BEETLE_GET_PIN_NUM(pinctrl) \
|
||||
(((pinctrl) >> V2M_BEETLE_EXP_NUM_POS) & V2M_BEETLE_EXP_NUM_MASK)
|
||||
#define BEETLE_GET_PIN_ALT_FUNC(pinctrl) \
|
||||
(((pinctrl) >> V2M_BEETLE_ALT_FUNC_POS) & V2M_BEETLE_ALT_FUNC_MASK)
|
Loading…
Add table
Add a link
Reference in a new issue