Example #1
0
/*
 *power off the csi module,clear the parameters
 */
static void amcsi_feclose(struct tvin_frontend_s *fe)
{
        struct amcsi_dev_s *devp = container_of(fe, amcsi_dev_t, frontend);
        enum tvin_port_e port = devp->para.port;

        if((port != TVIN_PORT_MIPI)){
                DPRINT("[mipi..]%s:invaild port %d.\n",__func__, port);
                return;
        }

#if 0
        devp->irq_num = INT_MIPI_PHY; //INT_CSI2_HOST;
        free_irq(devp->irq_num, (void *)devp);
#if 0
        devp->irq_num = INT_CSI2_HOST_2;
        free_irq(devp->irq_num, (void *)devp);
#endif
#endif
        devp->reset = 0;
        devp->reset_count = 0;

        del_timer_sync(&devp->t);
        am_mipi_csi2_uninit();

        memset(&devp->para, 0, sizeof(vdin_parm_t));
}
static void stop_mipi_vdin(vdin_ops_privdata_t * data)
{
    if(data->run_flag == true){
        mipi_dbg("stop_mipi_vdin.\n");
        am_mipi_csi2_uninit();
        data->param.fmt_info.fmt= TVIN_SIG_FMT_NULL;
        data->run_flag = false;
    }else{
         mipi_error("stop_mipi_vdin is not started yet. \n");
    }
    return;
}
static void csi2_vdin_check(vdin_ops_privdata_t* data)
{
    data->watchdog_cnt++;
    if(data->watchdog_cnt > 20){
        am_mipi_csi2_uninit();
        data->hw_info.frame = NULL;
        data->mipi_vdin_skip = MIPI_SKIP_FRAME_NUM;
        data->reset_flag = 1;
        wake_up_interruptible(&data->complete);
        data->done_flag = true;
        am_mipi_csi2_init(&data->hw_info);
        data->watchdog_cnt = 0;
        data->param.status = TVIN_SIG_STATUS_NOSIG;
        mipi_error("[mipi_vdin]:csi2_vdin_check-- time out !!!!\n");
        return ;
    }

    if (data->run_flag != true)
        mipi_error("csi2_vdin_check: mipi still not run. \n");
    return ;
}