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
|
#define NRF_PSEL_TWIM(reg, line) ((NRF_TWIM_Type *)reg)->PSEL.line
|
||||||
#endif
|
#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.
|
* @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);
|
NRF_GPIO_PIN_INPUT_CONNECT);
|
||||||
break;
|
break;
|
||||||
#endif /* defined(NRF_PSEL_TWIM) */
|
#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:
|
default:
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,6 +77,24 @@
|
||||||
#define NRF_FUN_TWIM_SCL 11U
|
#define NRF_FUN_TWIM_SCL 11U
|
||||||
/** TWI master SDA */
|
/** TWI master SDA */
|
||||||
#define NRF_FUN_TWIM_SDA 12U
|
#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