Commit 29a3381a2f609653b5c6933706a8d0449e4b7600

Authored by 장형기
1 parent 5a9a1b1828
Exists in master and in 2 other branches fhd, fhd-demo

touch - tsc2007 수정

kernel/linux-imx6_3.14.28/arch/arm/boot/dts/imx6qdl-prime-oven.dtsi
@@ -401,7 +401,8 @@ @@ -401,7 +401,8 @@
401 interrupt-parent = <&gpio6>; 401 interrupt-parent = <&gpio6>;
402 interrupts = <9 0>; 402 interrupts = <9 0>;
403 gpios = <&gpio6 9 0>; 403 gpios = <&gpio6 9 0>;
404 - ti,x-plate-ohms = <180>; 404 + ti,x-plate-ohms = <470>;
  405 + ti,poll-period = <10>;
405 }; 406 };
406 }; 407 };
407 408
kernel/linux-imx6_3.14.28/drivers/input/touchscreen/tsc2007.c
@@ -170,13 +170,14 @@ static bool tsc2007_is_pen_down(struct tsc2007 *ts) @@ -170,13 +170,14 @@ static bool tsc2007_is_pen_down(struct tsc2007 *ts)
170 return ts->get_pendown_state(&ts->client->dev); 170 return ts->get_pendown_state(&ts->client->dev);
171 } 171 }
172 172
  173 +#if 0 // Org [FALINUX] 2017.10.11 tsheaven@falinux.com
173 static irqreturn_t tsc2007_soft_irq(int irq, void *handle) 174 static irqreturn_t tsc2007_soft_irq(int irq, void *handle)
174 { 175 {
175 struct tsc2007 *ts = handle; 176 struct tsc2007 *ts = handle;
176 struct input_dev *input = ts->input; 177 struct input_dev *input = ts->input;
177 struct ts_event tc; 178 struct ts_event tc;
178 u32 rt; 179 u32 rt;
179 - 180 +
180 while (!ts->stopped && tsc2007_is_pen_down(ts)) { 181 while (!ts->stopped && tsc2007_is_pen_down(ts)) {
181 182
182 /* pen is down, continue with the measurement */ 183 /* pen is down, continue with the measurement */
@@ -212,6 +213,8 @@ static irqreturn_t tsc2007_soft_irq(int irq, void *handle) @@ -212,6 +213,8 @@ static irqreturn_t tsc2007_soft_irq(int irq, void *handle)
212 * repeat at least once more the measurement. 213 * repeat at least once more the measurement.
213 */ 214 */
214 dev_dbg(&ts->client->dev, "ignored pressure %d\n", rt); 215 dev_dbg(&ts->client->dev, "ignored pressure %d\n", rt);
  216 + printk("-DOWN point(%4d,%4d), pressure (%4u), ts->max_rt(%d)\n",
  217 + tc.x, tc.y, rt, ts->max_rt);
215 } 218 }
216 219
217 wait_event_timeout(ts->wait, ts->stopped, 220 wait_event_timeout(ts->wait, ts->stopped,
@@ -229,6 +232,93 @@ static irqreturn_t tsc2007_soft_irq(int irq, void *handle) @@ -229,6 +232,93 @@ static irqreturn_t tsc2007_soft_irq(int irq, void *handle)
229 232
230 return IRQ_HANDLED; 233 return IRQ_HANDLED;
231 } 234 }
  235 +#else // [FALINUX] 2017.10.11 tsheaven@falinux.com
  236 +static irqreturn_t tsc2007_soft_irq(int irq, void *handle)
  237 +{
  238 + struct tsc2007 *ts = handle;
  239 + struct input_dev *input = ts->input;
  240 + struct ts_event tc;
  241 + struct ts_event tmp_tc;
  242 + u32 rt;
  243 + char first_read = 0;
  244 +
  245 + while (!ts->stopped && tsc2007_is_pen_down(ts)) {
  246 +
  247 + /* pen is down, continue with the measurement */
  248 + tsc2007_read_values(ts, &tc);
  249 +
  250 + rt = tsc2007_calculate_pressure(ts, &tc);
  251 +
  252 + switch ( first_read ) {
  253 + case 0 : first_read = 1;
  254 + continue;
  255 + case 1 : first_read = 2;
  256 + continue;
  257 + case 2 : tmp_tc.x = tc.x;
  258 + tmp_tc.y = tc.y;
  259 + first_read = 3;
  260 + break;
  261 + case 3 : if( (rt < 150) || (rt > 700) ) {
  262 + continue;
  263 + }
  264 + if( (abs(tmp_tc.x - tc.x) > 200) || (abs(tmp_tc.y - tc.y) > 200) ) {
  265 + first_read = 0;
  266 + continue;
  267 + }
  268 + break;
  269 + }
  270 +
  271 + if (!rt && !ts->get_pendown_state) {
  272 + /*
  273 + * If pressure reported is 0 and we don't have
  274 + * callback to check pendown state, we have to
  275 + * assume that pen was lifted up.
  276 + */
  277 + break;
  278 + }
  279 +
  280 + if (rt <= ts->max_rt) {
  281 + dev_dbg(&ts->client->dev,
  282 + "DOWN point(%4d,%4d), pressure (%4u)\n",
  283 + tc.x, tc.y, rt);
  284 +
  285 + input_report_key(input, BTN_TOUCH, 1);
  286 + input_report_abs(input, ABS_X, tc.x);
  287 + input_report_abs(input, ABS_Y, tc.y);
  288 + input_report_abs(input, ABS_PRESSURE, rt);
  289 +
  290 + input_sync(input);
  291 +
  292 + } else {
  293 + /*
  294 + * Sample found inconsistent by debouncing or pressure is
  295 + * beyond the maximum. Don't report it to user space,
  296 + * repeat at least once more the measurement.
  297 + */
  298 + dev_dbg(&ts->client->dev, "ignored pressure %d\n", rt);
  299 + printk("-DOWN point(%4d,%4d), pressure (%4u), ts->max_rt(%d)\n",
  300 + tc.x, tc.y, rt, ts->max_rt);
  301 + }
  302 +
  303 + tmp_tc.x = tc.x;
  304 + tmp_tc.y = tc.y;
  305 +
  306 + wait_event_timeout(ts->wait, ts->stopped,
  307 + msecs_to_jiffies(ts->poll_period));
  308 + }
  309 +
  310 + dev_dbg(&ts->client->dev, "UP\n");
  311 +
  312 + input_report_key(input, BTN_TOUCH, 0);
  313 + input_report_abs(input, ABS_PRESSURE, 0);
  314 + input_sync(input);
  315 +
  316 + if (ts->clear_penirq)
  317 + ts->clear_penirq();
  318 +
  319 + return IRQ_HANDLED;
  320 +}
  321 +#endif
232 322
233 static irqreturn_t tsc2007_hard_irq(int irq, void *handle) 323 static irqreturn_t tsc2007_hard_irq(int irq, void *handle)
234 { 324 {
release/imx6s-prime-oven.dtb
No preview for this file type
release/uImage
No preview for this file type