void cdsi_uninitialize(struct cdsi_dev *dev) { int cdsi = dev->base == CDSI0_BASE ? TSB_CDSI0 : TSB_CDSI1; #if CONFIG_ARCH_VIDCRYPT tsb_vidcrypt_disable(cdsi); tsb_clk_disable(TSB_CLK_VIDENCRYPT); #endif tsb_clk_disable(cdsi == TSB_CDSI0 ? TSB_CLK_CDSI0_REF : TSB_CLK_CDSI1_REF); if (dev->tx) { if (cdsi == TSB_CDSI0) { tsb_clk_disable(TSB_CLK_CDSI0_TX_SYS); tsb_clk_disable(TSB_CLK_CDSI0_TX_APB); } else { tsb_clk_disable(TSB_CLK_CDSI1_TX_SYS); tsb_clk_disable(TSB_CLK_CDSI1_TX_APB); } } else { if (cdsi == TSB_CDSI0) { tsb_clk_disable(TSB_CLK_CDSI0_RX_SYS); tsb_clk_disable(TSB_CLK_CDSI0_RX_APB); } else { tsb_clk_disable(TSB_CLK_CDSI1_RX_SYS); tsb_clk_disable(TSB_CLK_CDSI1_RX_APB); } } free(dev); }
/** * @brief Deinitialize SPI controller * * @param info pointer to the tsb_spi_dev_info struct. */ static void tsb_spi_hw_deinit(struct tsb_spi_dev_info *info) { /* Disable SPI controller */ tsb_spi_write(info->reg_base, DW_SPI_SSIENR, 0); /* release SPIM_CLK, SPIM_SDI and SPIM_SDO */ tsb_pin_release(PIN_SPIM); #if !defined(CONFIG_TSB_SPI_GPIO) /* release also SPIM_CS0 and SPIM_CS1 */ tsb_pin_release(PIN_SPIM_CSX_N); #endif tsb_clk_disable(TSB_CLK_SPIP); tsb_clk_disable(TSB_CLK_SPIS); info->spi_pmstate = PM_SLEEP; }
static int tsb_spi_suspend(struct device *dev) { struct tsb_spi_dev_info *info; info = device_get_private(dev); sem_wait(&info->lock); if (info->curr_xfer.rx_remaining) { sem_post(&info->lock); return -EBUSY; } tsb_clk_disable(TSB_CLK_SPIP); tsb_clk_disable(TSB_CLK_SPIS); info->spi_pmstate = PM_SLEEP; sem_post(&info->lock); return 0; }
static void cdsi_uninitialize(struct cdsi_dev *dev) { int cdsi = dev->base == CDSI0_BASE ? TSB_CDSI0 : TSB_CDSI1; tsb_clk_disable(cdsi == TSB_CDSI0 ? TSB_CLK_CDSI0_REF : TSB_CLK_CDSI1_REF); if (dev->tx) { if (cdsi == TSB_CDSI0) { tsb_clk_disable(TSB_CLK_CDSI0_TX_SYS); tsb_clk_disable(TSB_CLK_CDSI0_TX_APB); } else { tsb_clk_disable(TSB_CLK_CDSI1_TX_SYS); tsb_clk_disable(TSB_CLK_CDSI1_TX_APB); } } else { if (cdsi == TSB_CDSI0) { tsb_clk_disable(TSB_CLK_CDSI0_RX_SYS); tsb_clk_disable(TSB_CLK_CDSI0_RX_APB); } else { tsb_clk_disable(TSB_CLK_CDSI1_RX_SYS); tsb_clk_disable(TSB_CLK_CDSI1_RX_APB); } } free(dev); }