コード例 #1
0
ファイル: wacom_i2c.c プロジェクト: agat63/AGAT_GB27_kernel
static void pen_insert_work(struct work_struct *work)
{
    struct wacom_i2c *wac_i2c =
        container_of(work, struct wacom_i2c, pen_insert_dwork.work);

#ifdef WACOM_DEBOUNCEINT_BY_ESD
    pen_insert_state = !gpio_get_value(wac_i2c->gpio_pen_insert);

#if defined(CONFIG_MACH_T0)
    if (wac_i2c->invert_pen_insert)
        pen_insert_state = !pen_insert_state;
#endif
    if (wac_i2c->pen_insert == pen_insert_state) {
        printk(KERN_DEBUG "[E-PEN] %s INT: (%d) was skipped\n",
               __func__, wac_i2c->pen_insert);

#ifdef BATTERY_SAVING_MODE
        if (wac_i2c->pen_insert) {
            if (wac_i2c->battery_saving_mode)
                wacom_i2c_disable(wac_i2c);
        } else {
            if (firmware_updating_state == true)
                return;
            printk(KERN_DEBUG "[E-PEN] %s call WACOM Reset\n",
                   __func__);
            wac_i2c->wac_pdata->suspend_platform_hw();
            msleep(200);
            wacom_i2c_enable(wac_i2c);
        }
#endif
        return;
    }
    wac_i2c->pen_insert = pen_insert_state;

#else
    wac_i2c->pen_insert = !gpio_get_value(wac_i2c->gpio_pen_insert);
#if defined(CONFIG_MACH_T0)
    if (wac_i2c->invert_pen_insert)
        wac_i2c->pen_insert = !wac_i2c->pen_insert;
#endif
#endif


    printk(KERN_DEBUG "[E-PEN] %s : %d\n",
           __func__, wac_i2c->pen_insert);

    input_report_switch(wac_i2c->input_dev,
                        SW_PEN_INSERT, !wac_i2c->pen_insert);
    input_sync(wac_i2c->input_dev);

#ifdef BATTERY_SAVING_MODE
    if (wac_i2c->pen_insert) {
        if (wac_i2c->battery_saving_mode)
            wacom_i2c_disable(wac_i2c);
    } else
        wacom_i2c_enable(wac_i2c);
#endif
}
コード例 #2
0
static void pen_insert_work(struct work_struct *work)
{
	struct wacom_i2c *wac_i2c =
		container_of(work, struct wacom_i2c, pen_insert_dwork.work);

	if (wac_i2c->init_fail)
		return;
	wac_i2c->pen_insert = !gpio_get_value(wac_i2c->gpio_pen_insert);

	dev_info(&wac_i2c->client->dev, "%s: pen %s\n",
		__func__, wac_i2c->pen_insert ? "instert" : "remove");

	input_report_switch(wac_i2c->input_dev,
		SW_PEN_INSERT, !wac_i2c->pen_insert);
	input_sync(wac_i2c->input_dev);

#ifdef BATTERY_SAVING_MODE
	if (wac_i2c->pen_insert) {
		if (wac_i2c->battery_saving_mode)
			wacom_i2c_disable(wac_i2c);
	} else {
		wacom_i2c_enable(wac_i2c);
	}
#endif
}
コード例 #3
0
ファイル: wacom_i2c.c プロジェクト: agat63/AGAT_GB27_kernel
static void wacom_i2c_late_resume(struct early_suspend *h)
{
    struct wacom_i2c *wac_i2c =
        container_of(h, struct wacom_i2c, early_suspend);

    printk(KERN_DEBUG "[E-PEN] %s.\n", __func__);
    wacom_i2c_enable(wac_i2c);
}
コード例 #4
0
static void wacom_i2c_late_resume(struct early_suspend *h)
{
	struct wacom_i2c *wac_i2c =
	    container_of(h, struct wacom_i2c, early_suspend);

	dev_info(&wac_i2c->client->dev,
			"%s\n", __func__);

	wacom_i2c_enable(wac_i2c);
}
コード例 #5
0
static int wacom_i2c_input_open(struct input_dev *dev)
{
	struct wacom_i2c *wac_i2c = input_get_drvdata(dev);

	dev_info(&wac_i2c->client->dev,
			"%s\n", __func__);

	wacom_i2c_enable(wac_i2c);
	wac_i2c->enabled = true;
	return 0;
}
コード例 #6
0
void touchscreen_pen_enable(void)
{
	#ifdef TOUCHWAKE_DEBUG_PRINT
	pr_info("[TOUCHWAKE] Wacom enable\n");
	#endif

	if (touchwake_pen_data != NULL)
		wacom_i2c_enable(touchwake_pen_data);

	return;
}
コード例 #7
0
ファイル: wacom_i2c.c プロジェクト: agat63/AGAT_GB27_kernel
static void wac_statecheck_work(struct work_struct *work)
{
    int ret, i;
    char buf, test[10];
    struct wacom_i2c *wac_i2c =
        container_of(work, struct wacom_i2c, wac_statecheck_work.work);
    buf = COM_QUERY;
    printk(KERN_DEBUG "[E-PEN] %s\n", __func__);

    if (firmware_updating_state == true)
        return;

#ifdef BATTERY_SAVING_MODE
    if (wac_i2c->battery_saving_mode
            && wac_i2c->pen_insert) {
        printk(KERN_DEBUG "[E-PEN] escaped from wacom check mode\n");
        printk(KERN_DEBUG "        becase pen has inserted at lpm\n");
        return;
    }
#endif

#if defined(CONFIG_TARGET_LOCALE_KOR)
#if defined(CONFIG_MACH_T0) && defined(CONFIG_TDMB_ANT_DET)
    ret = gpio_get_value(wac_i2c->wac_pdata->gpio_esd_check);
    if (ret == 0) {
        printk(KERN_DEBUG "[E-PEN] skip wacom state checking\n");
        printk(KERN_DEBUG "        becase ANT has closed\n");
        schedule_delayed_work(&wac_i2c->wac_statecheck_work, HZ * 30);
        return;
    }
#endif
#endif

    ret = wacom_i2c_send(wac_i2c, &buf, sizeof(buf), false);
    if (ret > 0)
        printk(KERN_INFO "[E-PEN] buf:%d, sent:%d\n", buf, ret);
    else {
        printk(KERN_ERR "[E-PEN] Digitizer is not active\n");
        wac_i2c->wac_pdata->suspend_platform_hw();
        msleep(200);
        wacom_i2c_enable(wac_i2c);
        printk(KERN_ERR "[E-PEN] wacom reset done\n");
    }

    schedule_delayed_work(&wac_i2c->wac_statecheck_work, HZ * 30);
}
コード例 #8
0
ファイル: wacom_i2c.c プロジェクト: agat63/AGAT_GB27_kernel
static ssize_t epen_saving_mode_store(struct device *dev,
                                      struct device_attribute *attr, const char *buf,
                                      size_t count)
{
    struct wacom_i2c *wac_i2c = dev_get_drvdata(dev);
    int val;

    if (sscanf(buf, "%u", &val) == 1)
        wac_i2c->battery_saving_mode = !!val;

    if (wac_i2c->battery_saving_mode) {
        if (wac_i2c->pen_insert)
            wacom_i2c_disable(wac_i2c);
    } else
        wacom_i2c_enable(wac_i2c);
    return count;
}
コード例 #9
0
static ssize_t epen_saving_mode_store(struct device *dev,
				struct device_attribute *attr, const char *buf,
				size_t count)
{
	struct wacom_i2c *wac_i2c = dev_get_drvdata(dev);
	int val;

	if (sscanf(buf, "%u", &val) == 1)
		wac_i2c->battery_saving_mode = !!val;

	dev_info(&wac_i2c->client->dev, "%s: %s\n",
			__func__, val ? "checked" : "unchecked");

	if (wac_i2c->battery_saving_mode) {
		if (wac_i2c->pen_insert)
			wacom_i2c_disable(wac_i2c);
	} else {
		if (wac_i2c->enabled)
			wacom_i2c_enable(wac_i2c);
	}
	return count;
}