drivers: pinctrl: nrf: Add support for I2S and PDM peripherals
Add support for configuring pins of the nRF I2S and PDM peripherals. Signed-off-by: Andrzej Głąbek <andrzej.glabek@nordicsemi.no>
This commit is contained in:
parent
2306a97527
commit
0e2af43fc6
2 changed files with 80 additions and 0 deletions
|
@ -53,6 +53,14 @@ BUILD_ASSERT(((NRF_DRIVE_S0S1 == NRF_GPIO_PIN_S0S1) &&
|
|||
#define NRF_PSEL_TWIM(reg, line) ((NRF_TWIM_Type *)reg)->PSEL.line
|
||||
#endif
|
||||
|
||||
#if DT_HAS_COMPAT_STATUS_OKAY(nordic_nrf_i2s)
|
||||
#define NRF_PSEL_I2S(reg, line) ((NRF_I2S_Type *)reg)->PSEL.line
|
||||
#endif
|
||||
|
||||
#if DT_HAS_COMPAT_STATUS_OKAY(nordic_nrf_pdm)
|
||||
#define NRF_PSEL_PDM(reg, line) ((NRF_PDM_Type *)reg)->PSEL.line
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Configure pin settings.
|
||||
*
|
||||
|
@ -156,6 +164,60 @@ int pinctrl_configure_pins(const pinctrl_soc_pin_t *pins, uint8_t pin_cnt,
|
|||
NRF_GPIO_PIN_INPUT_CONNECT);
|
||||
break;
|
||||
#endif /* defined(NRF_PSEL_TWIM) */
|
||||
#if defined(NRF_PSEL_I2S)
|
||||
case NRF_FUN_I2S_SCK_M:
|
||||
NRF_PSEL_I2S(reg, SCK) = NRF_GET_PIN(pins[i]);
|
||||
nrf_gpio_pin_write(NRF_GET_PIN(pins[i]), 0);
|
||||
nrf_pin_configure(pins[i], NRF_GPIO_PIN_DIR_OUTPUT,
|
||||
NRF_GPIO_PIN_INPUT_DISCONNECT);
|
||||
break;
|
||||
case NRF_FUN_I2S_SCK_S:
|
||||
NRF_PSEL_I2S(reg, SCK) = NRF_GET_PIN(pins[i]);
|
||||
nrf_pin_configure(pins[i], NRF_GPIO_PIN_DIR_INPUT,
|
||||
NRF_GPIO_PIN_INPUT_CONNECT);
|
||||
break;
|
||||
case NRF_FUN_I2S_LRCK_M:
|
||||
NRF_PSEL_I2S(reg, LRCK) = NRF_GET_PIN(pins[i]);
|
||||
nrf_gpio_pin_write(NRF_GET_PIN(pins[i]), 0);
|
||||
nrf_pin_configure(pins[i], NRF_GPIO_PIN_DIR_OUTPUT,
|
||||
NRF_GPIO_PIN_INPUT_DISCONNECT);
|
||||
break;
|
||||
case NRF_FUN_I2S_LRCK_S:
|
||||
NRF_PSEL_I2S(reg, LRCK) = NRF_GET_PIN(pins[i]);
|
||||
nrf_pin_configure(pins[i], NRF_GPIO_PIN_DIR_INPUT,
|
||||
NRF_GPIO_PIN_INPUT_CONNECT);
|
||||
break;
|
||||
case NRF_FUN_I2S_SDIN:
|
||||
NRF_PSEL_I2S(reg, SDIN) = NRF_GET_PIN(pins[i]);
|
||||
nrf_pin_configure(pins[i], NRF_GPIO_PIN_DIR_INPUT,
|
||||
NRF_GPIO_PIN_INPUT_CONNECT);
|
||||
break;
|
||||
case NRF_FUN_I2S_SDOUT:
|
||||
NRF_PSEL_I2S(reg, SDOUT) = NRF_GET_PIN(pins[i]);
|
||||
nrf_gpio_pin_write(NRF_GET_PIN(pins[i]), 0);
|
||||
nrf_pin_configure(pins[i], NRF_GPIO_PIN_DIR_OUTPUT,
|
||||
NRF_GPIO_PIN_INPUT_DISCONNECT);
|
||||
break;
|
||||
case NRF_FUN_I2S_MCK:
|
||||
NRF_PSEL_I2S(reg, MCK) = NRF_GET_PIN(pins[i]);
|
||||
nrf_gpio_pin_write(NRF_GET_PIN(pins[i]), 0);
|
||||
nrf_pin_configure(pins[i], NRF_GPIO_PIN_DIR_OUTPUT,
|
||||
NRF_GPIO_PIN_INPUT_DISCONNECT);
|
||||
break;
|
||||
#endif /* defined(NRF_PSEL_I2S) */
|
||||
#if defined(NRF_PSEL_PDM)
|
||||
case NRF_FUN_PDM_CLK:
|
||||
NRF_PSEL_PDM(reg, CLK) = NRF_GET_PIN(pins[i]);
|
||||
nrf_gpio_pin_write(NRF_GET_PIN(pins[i]), 0);
|
||||
nrf_pin_configure(pins[i], NRF_GPIO_PIN_DIR_OUTPUT,
|
||||
NRF_GPIO_PIN_INPUT_DISCONNECT);
|
||||
break;
|
||||
case NRF_FUN_PDM_DIN:
|
||||
NRF_PSEL_PDM(reg, DIN) = NRF_GET_PIN(pins[i]);
|
||||
nrf_pin_configure(pins[i], NRF_GPIO_PIN_DIR_INPUT,
|
||||
NRF_GPIO_PIN_INPUT_CONNECT);
|
||||
break;
|
||||
#endif /* defined(NRF_PSEL_PDM) */
|
||||
default:
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
|
|
@ -77,6 +77,24 @@
|
|||
#define NRF_FUN_TWIM_SCL 11U
|
||||
/** TWI master SDA */
|
||||
#define NRF_FUN_TWIM_SDA 12U
|
||||
/** I2S SCK in master mode */
|
||||
#define NRF_FUN_I2S_SCK_M 13U
|
||||
/** I2S SCK in slave mode */
|
||||
#define NRF_FUN_I2S_SCK_S 14U
|
||||
/** I2S LRCK in master mode */
|
||||
#define NRF_FUN_I2S_LRCK_M 15U
|
||||
/** I2S LRCK in slave mode */
|
||||
#define NRF_FUN_I2S_LRCK_S 16U
|
||||
/** I2S SDIN */
|
||||
#define NRF_FUN_I2S_SDIN 17U
|
||||
/** I2S SDOUT */
|
||||
#define NRF_FUN_I2S_SDOUT 18U
|
||||
/** I2S MCK */
|
||||
#define NRF_FUN_I2S_MCK 19U
|
||||
/** PDM CLK */
|
||||
#define NRF_FUN_PDM_CLK 20U
|
||||
/** PDM DIN */
|
||||
#define NRF_FUN_PDM_DIN 21U
|
||||
|
||||
/** @} */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue