Esempio n. 1
0
/*
 * The functions for inserting/removing us as a module.
 */
static int __init s3c_ts_probe(struct platform_device *pdev)
{
	struct device *dev;
	struct input_dev *input_dev;
	struct s3c_ts_mach_info * s3c_ts_cfg;
	int ret;

	dev = &pdev->dev;

	s3c_ts_cfg = (struct s3c_ts_mach_info *) dev->platform_data;
	if (s3c_ts_cfg == NULL)
		return -EINVAL;

	ts = kzalloc(sizeof(struct s3c_ts_mach_info), GFP_KERNEL);
	data = kzalloc(sizeof(struct s3c_ts_data), GFP_KERNEL);

	memcpy (ts, s3c_ts_cfg, sizeof(struct s3c_ts_mach_info));

	input_dev = input_allocate_device();

	if (!input_dev) {
		ret = -ENOMEM;
		goto input_dev_fail;
	}

	data->dev = input_dev;

	data->dev->evbit[0] = data->dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
	data->dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);

	input_set_abs_params(data->dev, ABS_X, ts->x_coor_min, ts->x_coor_max, ts->x_coor_fuzz, 0);
	input_set_abs_params(data->dev, ABS_Y, ts->y_coor_min, ts->y_coor_max, ts->y_coor_fuzz, 0);

	input_set_abs_params(data->dev, ABS_PRESSURE, 0, 1, 0, 0);

	data->dev->name = s3c_ts_name;
	data->dev->id.bustype = BUS_RS232;
	data->dev->id.vendor = 0xDEAD;
	data->dev->id.product = 0xBEEF;
	data->dev->id.version = S3C_TSVERSION;

#ifdef CONFIG_HAS_EARLYSUSPEND
	data->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1;
	data->early_suspend.suspend = s3c_ts_early_suspend;
	data->early_suspend.resume = s3c_ts_late_resume;
	register_early_suspend(&data->early_suspend);
#endif /* CONFIG_HAS_EARLYSUSPEND */

	ret = s3c_adcts_register_ts(ts, s3c_ts_done_callback);
	if (ret) {
		dev_err(dev, "s3c_ts.c: Could not register adcts device(touchscreen)!\n");
		ret = -EIO;
		goto s3c_adcts_register_fail;
	}

	/* All went ok, so register to the input system */
	ret = input_register_device(data->dev);

	if (ret) {
		dev_err(dev, "s3c_ts.c: Could not register input device(touchscreen)!\n");
		ret = -EIO;
		goto input_register_fail;
	}
	return 0;

input_register_fail:
	s3c_adcts_unregister_ts();

s3c_adcts_register_fail:
	input_free_device (data->dev);

input_dev_fail:
	kfree (ts);
	kfree (data);

	return ret;
}
Esempio n. 2
0
void s3c_ts_late_resume(struct early_suspend *h)
{
	s3c_adcts_register_ts(ts, s3c_ts_done_callback);
}
Esempio n. 3
0
/*
 * The functions for inserting/removing us as a module.
 */
static int __init s3c_ts_probe(struct platform_device *pdev)
{
	struct device *dev;
	struct input_dev *input_dev;
	struct s3c_ts_mach_info * s3c_ts_cfg;
	int ret;
	int err;

	dev = &pdev->dev;

	s3c_ts_cfg = (struct s3c_ts_mach_info *) dev->platform_data;
	if (s3c_ts_cfg == NULL)
		return -EINVAL;

	ts = kzalloc(sizeof(struct s3c_ts_mach_info), GFP_KERNEL);
	data = kzalloc(sizeof(struct s3c_ts_data), GFP_KERNEL);

	memcpy (ts, s3c_ts_cfg, sizeof(struct s3c_ts_mach_info));
	
	input_dev = input_allocate_device();

	if (!input_dev) {
		ret = -ENOMEM;
		goto input_dev_fail;
	}
	
	data->dev = input_dev;

	data->xp_old = data->yp_old = -1;
	data->dev->evbit[0] = data->dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
	data->dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);

        input_set_abs_params(data->dev, ABS_X, 0, ts->screen_size_x, 0, 0);
        input_set_abs_params(data->dev, ABS_Y, 0, ts->screen_size_y, 0, 0);
	// [SEC_BSP.khLEE 2009.08.24 : Intialize variables for calibration mode
#ifdef CONFIG_SAMSUNG_CALIBRATION_MODE
	ret = init_samsung_cal_mode(ts->screen_size_x, ts->screen_size_y, ts->tscal);
	if(ret) 
	{
		dev_err(dev, "s3c_ts.c: Could not initialization(touchscreen)!\n");
		goto s3c_adcts_register_fail;
	}
		
#endif
	// ]

        set_bit(0,data->dev->evbit);
        set_bit(1,data->dev->evbit);
        set_bit(2,data->dev->evbit);
        set_bit(3,data->dev->evbit);
        set_bit(5,data->dev->evbit);

        set_bit(0,data->dev->relbit);
        set_bit(1,data->dev->relbit);

        set_bit(0,data->dev->absbit);
        set_bit(1,data->dev->absbit);
        set_bit(2,data->dev->absbit);

        set_bit(0,data->dev->swbit);

        for(err=0;err<512;err++) set_bit(err,data->dev->keybit);

        input_event(data->dev,5,0,1);

	input_set_abs_params(data->dev, ABS_PRESSURE, 0, 1, 0, 0);

	data->dev->name = s3c_ts_name;
	data->dev->id.bustype = BUS_RS232;
	data->dev->id.vendor = 0xDEAD;
	data->dev->id.product = 0xBEEF;
	data->dev->id.version = S3C_TSVERSION;

	ret = s3c_adcts_register_ts (ts, s3c_ts_done_callback);
	if(ret) {
		dev_err(dev, "s3c_ts.c: Could not register adcts device(touchscreen)!\n");
		ret = -EIO;
		goto s3c_adcts_register_fail;
	}

	/* All went ok, so register to the input system */
	ret = input_register_device(data->dev);
	
	if(ret) {
		dev_err(dev, "s3c_ts.c: Could not register input device(touchscreen)!\n");
		ret = -EIO;
		goto input_register_fail;
	}
	return 0;

input_register_fail:
	s3c_adcts_unregister_ts();

s3c_adcts_register_fail:
	input_free_device (data->dev);

input_dev_fail:
	kfree (ts);
	kfree (data);

	return ret;
}