Exemplo n.º 1
0
static irqreturn_t touchkey_interrupt_thread(int irq, void *touchkey_devdata)
{
	u8 data = 0;
	int i;
	int ret;
	int scancode;
	struct cypress_touchkey_devdata *devdata = touchkey_devdata;

	ret = i2c_touchkey_read_byte(devdata, &data);
	if (ret || (data & ESD_STATE_MASK)) {
		ret = recovery_routine(devdata);
		if (ret) {
			dev_err(&devdata->client->dev, "%s: touchkey recovery "
					"failed!\n", __func__);
			goto err;
		}
	}

	if (devdata->has_legacy_keycode)
	{
		scancode = (data & SCANCODE_MASK) - 1;
		if (scancode < 0 || scancode >= devdata->pdata->keycode_cnt)
		{
			dev_err(&devdata->client->dev, "%s: scancode is out of "
				"range\n", __func__);
			goto err;
		}
		input_report_key(devdata->input_dev,
			devdata->pdata->keycode[scancode],
			!(data & UPDOWN_EVENT_MASK));

#ifdef CONFIG_BLD
		if (!(data & UPDOWN_EVENT_MASK))
			touchkey_pressed();
#endif
	} else
	{
		for (i = 0; i < devdata->pdata->keycode_cnt; i++)
			input_report_key(devdata->input_dev,
				devdata->pdata->keycode[i],
				!!(data & (1U << i)));

#ifdef CONFIG_BLD
		for (i = 0; i < devdata->pdata->keycode_cnt; i++)
	    	{
			if(!!(data & (1U << i)))
			{			
				touchkey_pressed();
				break;
			}
	    	}
#endif
	}

	input_sync(devdata->input_dev);
err:
	return IRQ_HANDLED;
}
Exemplo n.º 2
0
static void bld_late_resume(struct early_suspend * h)
{
    device_suspended = false;

    backlight_dimmed = false;

    touchkey_pressed();

    return;
}
Exemplo n.º 3
0
static void bld_enable_backlights(void)
{
    if (bld_imp)
	{
	    bld_imp->enable();
	}

    backlight_dimmed = false;

    mutex_unlock(&lock);

    touchkey_pressed();

    return;
}
Exemplo n.º 4
0
static ssize_t backlightdimmer_delay_write(struct device * dev, struct device_attribute * attr, const char * buf, size_t size)
{
    unsigned int data;

    if(sscanf(buf, "%u\n", &data) == 1) 
	{
	    dimmer_delay = data;

	    pr_info("BLD delay set to %u\n", dimmer_delay);

	    touchkey_pressed();
	} 
    else 
	{
	    pr_info("%s: invalid input\n", __FUNCTION__);
	}

    return size;
}
Exemplo n.º 5
0
static ssize_t backlightdimmer_status_write(struct device * dev, struct device_attribute * attr, const char * buf, size_t size)
{
    unsigned int data;

    if(sscanf(buf, "%u\n", &data) == 1) 
	{
	    pr_devel("%s: %u \n", __FUNCTION__, data);
	    
	    if (data == 1) 
		{
		    pr_info("%s: BLD function enabled\n", __FUNCTION__);

		    bld_enabled = true;

		    touchkey_pressed();
		} 
	    else if (data == 0) 
		{
		    pr_info("%s: BLD function disabled\n", __FUNCTION__);

		    bld_enabled = false;

		    cancel_delayed_work(&dimmer_work);
		    flush_scheduled_work();

		    if (backlight_dimmed)
			{
			    bld_enable_backlights();
			}
		} 
	    else 
		{
		    pr_info("%s: invalid input range %u\n", __FUNCTION__, data);
		}
	} 
    else 
	{
	    pr_info("%s: invalid input\n", __FUNCTION__);
	}

    return size;
}
Exemplo n.º 6
0
static irqreturn_t touchkey_interrupt_thread(int irq, void *touchkey_devdata)
{
	u8 data;
	int i;
	int ret;
	int scancode;
	struct cypress_touchkey_devdata *devdata = touchkey_devdata;
    
	ret = i2c_touchkey_read_byte(devdata, &data);
	if (ret || (data & ESD_STATE_MASK)) {
		ret = recovery_routine(devdata);
		if (ret) {
			dev_err(&devdata->client->dev, "%s: touchkey recovery "
					"failed!\n", __func__);
			goto err;
		}
	}
    
	if (devdata->has_legacy_keycode) {
		scancode = (data & SCANCODE_MASK) - 1;
		if (scancode < 0 || scancode >= devdata->pdata->keycode_cnt) {
			dev_err(&devdata->client->dev, "%s: scancode is out of "
                    "range\n", __func__);
			goto err;
		}
        
#ifdef CONFIG_SCREEN_DIMMER
#ifdef CONFIG_TOUCH_WAKE
		if (!device_is_suspended() && !screen_is_dimmed())
#else
            if (!screen_is_dimmed())
#endif
#else
#ifdef CONFIG_TOUCH_WAKE
                if (!device_is_suspended())
#endif
#endif
                {
                    input_report_key(devdata->input_dev,
                                     devdata->pdata->keycode[scancode],
                                     !(data & UPDOWN_EVENT_MASK));
                }
        
#if defined(CONFIG_TOUCH_WAKE) || defined(CONFIG_SCREEN_DIMMER) || defined(CONFIG_BLD)
		if (!(data & UPDOWN_EVENT_MASK))
        {
#ifdef CONFIG_BLD			
			touchkey_pressed();
#endif
#ifdef CONFIG_SCREEN_DIMMER
			touchscreen_pressed();
#endif
#ifdef CONFIG_TOUCH_WAKE
			touch_press();
#endif
        }
#endif
	} else {
#ifdef CONFIG_SCREEN_DIMMER
#ifdef CONFIG_TOUCH_WAKE
		if (!device_is_suspended() && !screen_is_dimmed())
#else
            if (!screen_is_dimmed())
#endif
#else
#ifdef CONFIG_TOUCH_WAKE
                if (!device_is_suspended())
#endif
#endif
                {
                    for (i = 0; i < devdata->pdata->keycode_cnt; i++)
                        input_report_key(devdata->input_dev,
                                         devdata->pdata->keycode[i],
                                         !!(data & (1U << i)));
                }
        
#if defined(CONFIG_TOUCH_WAKE) || defined(CONFIG_SCREEN_DIMMER) || defined(CONFIG_BLD)
		for (i = 0; i < devdata->pdata->keycode_cnt; i++)
        {
			if(!!(data & (1U << i)))
            {
#ifdef CONFIG_BLD			
				touchkey_pressed();
#endif
#ifdef CONFIG_SCREEN_DIMMER
				touchscreen_pressed();
#endif
#ifdef CONFIG_TOUCH_WAKE
				touch_press();
#endif
				break;
            }
        }
#endif
	}
    
	input_sync(devdata->input_dev);
err:
	return IRQ_HANDLED;
}