int devsif_close(FAR struct file *filep) { sif_sem_wait(); if (--vsn_sif.opencnt) { // suspend (powerdown) hardware sif_gpios_reset(); //STM32_TIM_SETCLOCK(vsn_sif.tim3, 0); //STM32_TIM_SETCLOCK(vsn_sif.tim8, 0); } sif_sem_post(); return 0; }
int sif_init(void) { /* Initialize data-structure */ vsn_sif.state = VSN_SIF_STATE_POWERDOWN; vsn_sif.opencnt = 0; sem_init(&vsn_sif.exclusive_access, 0, 1); /* Initialize hardware */ sif_gpios_reset(); if ( sif_anout_init() != OK ) return -1; /* If everything is okay, register the driver */ (void)register_driver("/dev/sif0", &devsif_fops, 0666, NULL); return OK; }