/* * 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; }
void s3c_ts_late_resume(struct early_suspend *h) { s3c_adcts_register_ts(ts, s3c_ts_done_callback); }
/* * 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; }