@ -41,16 +41,11 @@ LOG_MODULE_REGISTER(spi_ambiq);
# define SPI_AMBIQ_MANUAL_CACHE_COHERENCY_REQUIRED 0
# define SPI_AMBIQ_MANUAL_CACHE_COHERENCY_REQUIRED 0
# endif /* defined(CONFIG_DCACHE) && !defined(CONFIG_NOCACHE_MEMORY) */
# endif /* defined(CONFIG_DCACHE) && !defined(CONFIG_NOCACHE_MEMORY) */
# define PWRCTRL_MAX_WAIT_US 5
typedef int ( * ambiq_spi_pwr_func_t ) ( void ) ;
struct spi_ambiq_config {
struct spi_ambiq_config {
uint32_t base ;
uint32_t base ;
int size ;
int size ;
uint32_t clock_freq ;
uint32_t clock_freq ;
const struct pinctrl_dev_config * pcfg ;
const struct pinctrl_dev_config * pcfg ;
ambiq_spi_pwr_func_t pwr_func ;
void ( * irq_config_func ) ( void ) ;
void ( * irq_config_func ) ( void ) ;
} ;
} ;
@ -517,7 +512,7 @@ static int spi_ambiq_init(const struct device *dev)
return - ENXIO ;
return - ENXIO ;
}
}
ret = cfg - > pwr_func ( ) ;
ret = am_hal_iom_power_ctrl ( data - > iom_handler , AM_HAL_SYSCTRL_WAKE , false ) ;
ret | = pinctrl_apply_state ( cfg - > pcfg , PINCTRL_STATE_DEFAULT ) ;
ret | = pinctrl_apply_state ( cfg - > pcfg , PINCTRL_STATE_DEFAULT ) ;
ret | = spi_context_cs_configure_all ( & data - > ctx ) ;
ret | = spi_context_cs_configure_all ( & data - > ctx ) ;
@ -571,14 +566,6 @@ static int spi_ambiq_pm_action(const struct device *dev, enum pm_device_action a
# define AMBIQ_SPI_INIT(n) \
# define AMBIQ_SPI_INIT(n) \
PINCTRL_DT_INST_DEFINE ( n ) ; \
PINCTRL_DT_INST_DEFINE ( n ) ; \
static int pwr_on_ambiq_spi_ # # n ( void ) \
{ \
uint32_t addr = DT_REG_ADDR ( DT_INST_PHANDLE ( n , ambiq_pwrcfg ) ) + \
DT_INST_PHA ( n , ambiq_pwrcfg , offset ) ; \
sys_write32 ( ( sys_read32 ( addr ) | DT_INST_PHA ( n , ambiq_pwrcfg , mask ) ) , addr ) ; \
k_busy_wait ( PWRCTRL_MAX_WAIT_US ) ; \
return 0 ; \
} \
static void spi_irq_config_func_ # # n ( void ) \
static void spi_irq_config_func_ # # n ( void ) \
{ \
{ \
IRQ_CONNECT ( DT_INST_IRQN ( n ) , DT_INST_IRQ ( n , priority ) , spi_ambiq_isr , \
IRQ_CONNECT ( DT_INST_IRQN ( n ) , DT_INST_IRQ ( n , priority ) , spi_ambiq_isr , \
@ -594,8 +581,7 @@ static int spi_ambiq_pm_action(const struct device *dev, enum pm_device_action a
. size = DT_INST_REG_SIZE ( n ) , \
. size = DT_INST_REG_SIZE ( n ) , \
. clock_freq = DT_INST_PROP ( n , clock_frequency ) , \
. clock_freq = DT_INST_PROP ( n , clock_frequency ) , \
. pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET ( n ) , \
. pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET ( n ) , \
. irq_config_func = spi_irq_config_func_ # # n , \
. irq_config_func = spi_irq_config_func_ # # n } ; \
. pwr_func = pwr_on_ambiq_spi_ # # n } ; \
PM_DEVICE_DT_INST_DEFINE ( n , spi_ambiq_pm_action ) ; \
PM_DEVICE_DT_INST_DEFINE ( n , spi_ambiq_pm_action ) ; \
SPI_DEVICE_DT_INST_DEFINE ( n , spi_ambiq_init , PM_DEVICE_DT_INST_GET ( n ) , & spi_ambiq_data # # n , \
SPI_DEVICE_DT_INST_DEFINE ( n , spi_ambiq_init , PM_DEVICE_DT_INST_GET ( n ) , & spi_ambiq_data # # n , \
& spi_ambiq_config # # n , POST_KERNEL , CONFIG_SPI_INIT_PRIORITY , \
& spi_ambiq_config # # n , POST_KERNEL , CONFIG_SPI_INIT_PRIORITY , \