Beispiel #1
0
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);
}
Beispiel #2
0
/**
 * @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;
}
Beispiel #3
0
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;
}
Beispiel #4
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);
}