/*
 * 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;
}
Beispiel #4
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;
}
Beispiel #6
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;
}
Beispiel #7
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));
}
Beispiel #8
0
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;
}