/* * The reason why we use workqueue here is input event report handler * is called in irq disable content, but core freq-chg related function * cpufreq_notify_transition request irq is enabled. * Call chain as below: * input_event(irq disable here) -> input_handle_event-> input_pass_event-> * handler->event(handle, type, code, value) = touchboost_event-> * touchboost_work */ static void touchboost_work(struct work_struct *w) { pm_qos_update_request_timeout(&touchboost_cpu_qos_min, LONG_MAX, CPU_BOOST_TIME); pm_qos_update_request_timeout(&touchboost_ddr_qos_min, DDR_CONSTRAINT_LVL2, CPU_BOOST_TIME); /* boost gpu0(3D) to max frequency 624000KHz*/ pm_qos_update_request_timeout(&touchboost_gpu3d_qos_min, 624000, CPU_BOOST_TIME); /* boost gpu1(2D) to max frequency 416000KHz*/ pm_qos_update_request_timeout(&touchboost_gpu2d_qos_min, 416000, CPU_BOOST_TIME); }
static int __init exynos7_devfreq_disp_qos_init(void) { pm_qos_add_request(&exynos7_disp_qos, PM_QOS_DISPLAY_THROUGHPUT, exynos7420_qos_disp.default_qos); pm_qos_add_request(&min_disp_thermal_qos, PM_QOS_DISPLAY_THROUGHPUT, exynos7420_qos_disp.default_qos); pm_qos_add_request(&boot_disp_qos, PM_QOS_DISPLAY_THROUGHPUT, exynos7420_qos_disp.default_qos); pm_qos_update_request_timeout(&exynos7_disp_qos, exynos7_devfreq_disp_profile.initial_freq, 40000 * 1000); return 0; }
static int __init exynos5_devfreq_int_qos_init(void) { pm_qos_add_request(&exynos5_int_qos, PM_QOS_DEVICE_THROUGHPUT, exynos5433_qos_int.default_qos); pm_qos_add_request(&min_int_thermal_qos, PM_QOS_DEVICE_THROUGHPUT, exynos5433_qos_int.default_qos); pm_qos_add_request(&boot_int_qos, PM_QOS_DEVICE_THROUGHPUT, exynos5433_qos_int.default_qos); pm_qos_add_request(&exynos5_int_bts_qos, PM_QOS_DEVICE_THROUGHPUT, exynos5433_qos_int.default_qos); pm_qos_update_request_timeout(&exynos5_int_qos, exynos5_devfreq_int_profile.initial_freq, 40000 * 1000); return 0; }
int gpu_atlas_min_pmqos(struct exynos_context *platform, int atlas_step) { DVFS_ASSERT(platform); if(!platform->devfreq_status) return 0; pm_qos_update_request_timeout(&proactive_atlas_min_qos, platform->atlas_table[atlas_step], 30000); return 0; }
int gpu_atlas_pmqos(struct exynos_context *platform, int atlas_freq) { DVFS_ASSERT(platform); if(!platform->devfreq_status) return 0; //pm_qos_update_request(&proactive_atlas_min_qos, atlas_freq); pm_qos_update_request_timeout(&proactive_atlas_min_qos, atlas_freq, 30000); return 0; }
static int bluedroid_pm_resume(struct platform_device *pdev) { struct bluedroid_pm_data *bluedroid_pm = platform_get_drvdata(pdev); if (bluedroid_pm->host_wake) if (!bluedroid_pm->is_blocked || !bluedroid_pm_blocked) { disable_irq_wake(bluedroid_pm->host_wake_irq); if (bluedroid_pm->resume_min_frequency) pm_qos_update_request_timeout( &bluedroid_pm->resume_cpu_freq_req, bluedroid_pm->resume_min_frequency, DEFAULT_RESUME_CPU_TIMEOUT); } return 0; }
static void pm_qos_set_worker(struct work_struct *work) { /* keep the request for 500ms */ pm_qos_update_request_timeout(&smd_tty_qos_req, 0, jiffies_to_usecs(HZ / 2)); }
static int hsictty_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg) { struct usb_serial_port *port = tty->driver_data; struct hsictty_port_private *portdata; struct hsictty_intf_private *intfdata; int channel = -1; int ret = -EINVAL; portdata = usb_get_serial_port_data(port); intfdata = usb_get_serial_data(port->serial); down(&portdata->ch_sem_w); down(&portdata->ch_sem_r); channel = tty->index; if (!intfdata->multi_channel_mode && channel != HSIC_DATA_START_CHANNEL) { hsictty_dbg("%s: invalid channel mode -- ch:%d!\n", __func__, channel); goto out; } switch (cmd) { case HSIC_TTY_IOCTL_SET_MULTIMODE: { int mode = 1; int i = 0, j = 0; struct usb_serial_port *port_tmp; struct hsictty_port_private *portdata_tmp; struct urb *urb; if (copy_from_user(&mode, (int *)arg, sizeof(int))) { hsictty_error("%s: copy param failed\n", __func__); ret = -EFAULT; goto out; } intfdata->multi_channel_mode = mode; /*set tx zlp support for multi-channel, clear tx zlp support for bootrom */ for (i = 0; i < port->serial->num_ports; ++i) { port_tmp = port->serial->port[i]; portdata_tmp = usb_get_serial_port_data(port_tmp); for (j = 0; j < N_OUT_URB; j++) { urb = portdata_tmp->out_urbs[j]; if (urb) { if (mode) urb->transfer_flags |= URB_ZERO_PACKET; else urb->transfer_flags &= ~URB_ZERO_PACKET; } } } hsictty_dbg ("%s: set hsic tty multi-channel mode to [%d][%s] from user space!\n", __func__, mode, mode ? "multi-channel mode" : "single channel mode"); } break; case HSIC_TTY_IOCTL_HSIC_RESET: { int i = 0; struct usb_serial_port *port_tmp; struct hsictty_port_private *portdata_tmp; //struct tty_struct *tty = NULL; pm_qos_update_request_timeout(&dl_kfc_num_qos, 3, 15 * 1000 * 1000); pm_qos_update_request_timeout(&dl_kfc_freq_qos, 1200000, 15 * 1000 * 1000); if (intfdata->support_pm) { pm_runtime_resume(&port->serial->dev->dev); usb_disable_autosuspend(port->serial->dev); } intfdata->multi_channel_mode = 0; for (i = 1; i < port->serial->num_ports; ++i) { port_tmp = port->serial->port[i]; portdata_tmp = usb_get_serial_port_data(port_tmp); portdata_tmp->opened = 0; #ifndef USE_READ_WORK complete_all(&portdata_tmp->rx_notifier); #endif complete_all(&portdata_tmp->tx_notifier); /* hangup here before diconncest marked * may casue tty abnormally opened in serial core. tty = tty_port_tty_get(&port_tmp->port); if (tty) { tty_vhangup(tty); tty_kref_put(tty); } */ clear_bit(i, &intfdata->channel_open_flag); } #ifdef BACKUP_DATA_DUMP if (!dumped) { dumped = 1; backup_dump(HSIC_DATA_START_CHANNEL, 0); backup_dump(HSIC_DATA_START_CHANNEL, 1); } #endif hsictty_info ("%s: hsic tty reset triggerred from userspace!\n", __func__); } break; case HSIC_TTY_IOCTL_HSIC_PM_ENABLE: if (intfdata->support_pm) { usb_enable_autosuspend(port->serial->dev); //pm_runtime_set_autosuspend_delay(&port->serial->dev->dev, 200); /* enable ehci root_hub runtime_pm */ pm_runtime_allow(port->serial->dev->dev.parent->parent); } hsictty_info("%s: hsic pm enable from userspace!\n", __func__); break; default: hsictty_error("%s: illgal command !\n", __func__); ret = -ENOIOCTLCMD; goto out; } ret = 0; out: up(&portdata->ch_sem_w); up(&portdata->ch_sem_r); return ret; }