/** * handles device removal event * * @param context pointer to the client context (smschar parameters block) * */ static void smschar_onremove(void *context) { struct smschar_device_t *dev = (struct smschar_device_t *)context; smschar_unregister_client(dev); dev->coredev = NULL; }
/** * unregisters client associated with the node * * @param inode Inode concerned. * @param file File concerned. * */ static int smschar_release(struct inode *inode, struct file *file) { smschar_unregister_client(file->private_data); sms_info("exiting"); return 0; }
/** * unregisters client associated with the node * * @param inode Inode concerned. * @param file File concerned. * */ static int smschar_release(struct inode *inode, struct file *file) { struct smschar_device_t *dev = file->private_data; sms_info("entering, %d\n", g_open_count); smschar_unregister_client(file->private_data); if(!(--g_open_count)&& (g_open_first==0)) { smscore_reset_device_drvs(dev->coredev); smsspi_off(); g_open_first=0; sms_info("Released last time"); } sms_info("exiting"); return 0; }