/** * Open File. * */ static int dsps_open(struct inode *ip, struct file *fp) { int ret = 0; pr_debug("%s.\n", __func__); if (drv->ref_count == 0) { /* clocks must be ON before loading.*/ ret = dsps_power_on_handler(); if (ret) return ret; ret = dsps_load(drv->pdata->pil_name); if (ret) { dsps_power_off_handler(); return ret; } dsps_resume(); } drv->ref_count++; return ret; }
/** * IO Control - handle commands from client. * */ static int dsps_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { int ret = 0; u32 val = 0; pr_debug("%s.\n", __func__); switch (cmd) { case DSPS_IOCTL_ON: ret = dsps_power_on_handler(); dsps_resume(); break; case DSPS_IOCTL_OFF: dsps_suspend(); ret = dsps_power_off_handler(); break; case DSPS_IOCTL_READ_SLOW_TIMER: val = dsps_read_slow_timer(); ret = put_user(val, (u32 __user *) arg); break; case DSPS_IOCTL_READ_FAST_TIMER: val = dsps_read_fast_timer(); ret = put_user(val, (u32 __user *) arg); break; default: ret = -EINVAL; break; } return ret; }
static int dsps_open(struct inode *ip, struct file *fp) { int ret = 0; pr_debug("%s.\n", __func__); if (drv->ref_count == 0) { ret = dsps_power_on_handler(); if (ret) return ret; ret = dsps_load(); if (ret) { dsps_power_off_handler(); return ret; } if (!drv->pdata->dsps_pwr_ctl_en) dsps_resume(); } drv->ref_count++; return ret; }
/** * Powerup function * called by the restart notifier * */ static int dsps_powerup(const struct subsys_data *subsys) { pr_debug("%s\n", __func__); dsps_power_on_handler(); pil_force_boot(drv->pdata->pil_name); atomic_set(&drv->crash_in_progress, 0); if (atomic_read(&drv->wd_crash) > 0) { atomic_set(&drv->wd_crash, 0); enable_irq(drv->wdog_irq); } dsps_resume(); return 0; }
static int msm_dsps_power(bool on) { int ret; if (on) { ret = dsps_power_on_handler(); dsps_resume(); } else { dsps_suspend(); ret = dsps_power_off_handler(); } return ret; }
static long dsps_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { int ret = 0; u32 val = 0; pr_debug("%s.\n", __func__); switch (cmd) { case DSPS_IOCTL_ON: if (!drv->pdata->dsps_pwr_ctl_en) { ret = dsps_power_on_handler(); dsps_resume(); } break; case DSPS_IOCTL_OFF: if (!drv->pdata->dsps_pwr_ctl_en) { dsps_suspend(); ret = dsps_power_off_handler(); } break; case DSPS_IOCTL_READ_SLOW_TIMER: val = dsps_read_slow_timer(); ret = put_user(val, (u32 __user *) arg); break; case DSPS_IOCTL_READ_FAST_TIMER: val = dsps_read_fast_timer(); ret = put_user(val, (u32 __user *) arg); break; case DSPS_IOCTL_RESET: pr_err("%s: User-initiated DSPS reset.\nResetting DSPS\n", __func__); subsystem_restart("dsps"); ret = 0; break; default: ret = -EINVAL; break; } return ret; }