안녕하세요...

어찌어찌 해서 Tcou할때 좌표가 나오도록 하였습니다.

 

그런데 사용하고 있는 Panel이 7"인데요 유효한 자표가 나오는것은 이보다 4.8" 크기만 유효한 좌표가 나오는데요.

 

touch drvier의 ADC를 거친 다음 의 Data를 찍어 보았는데요.

아래의 빨간 부분은 무엇인가 X,Y 좌표가 움직이는데 그외의 영역에서는 X.Y값이 1024로 계속 나오는데요.

touch.jpg

Touch Screen의 Width, height의 설정 하는 부분이 있는지요.? 한참 찾고 있는 중인데 어디있는지를 모르겠네요.

혹시 Touch Screen을 하시다 이런 경우 경험 하신분 조언을 좀 부탁드립니다.

 

 

static int __devinit atmel_tsadcc_probe(struct platform_device *pdev)

      ...

     ts_dev->input = input_dev;
     ts_dev->bufferedmeasure = 0;

     snprintf(ts_dev->phys, sizeof(ts_dev->phys), "%s/input0", dev_name(&pdev->dev));

     input_dev->name = "atmel touch screen controller";
     input_dev->phys = ts_dev->phys;
     input_dev->dev.parent = &pdev->dev;

 

     __set_bit(EV_ABS, input_dev->evbit);

#if 1 

     input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
     input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
#endif

     input_set_abs_params(input_dev, ABS_X, 0, 0x3FF, 0, 0);
     input_set_abs_params(input_dev, ABS_Y, 0, 0x3FF, 0, 0);
     input_set_abs_params(input_dev, ABS_PRESSURE, 0, 15000, 0, 0);
     input_set_capability(input_dev, EV_KEY, BTN_TOUCH);

 

     /* clk_enable() always returns 0, no need to check it */
     clk_enable(ts_dev->clk);

     prsc = clk_get_rate(ts_dev->clk);
     dev_info(&pdev->dev, "Master clock is set at: %d Hz\n", prsc);

    

     if (!pdata)
      goto err_fail;

 

     if (!pdata->adc_clock)
      pdata->adc_clock = ADC_DEFAULT_CLOCK;

 

     prsc = (prsc / (2 * pdata->adc_clock)) - 1;
     trigger_period = pdata->adc_clock / (200 * COUNT_MAX) -1;
    

     if (trigger_period < 1)
      trigger_period = 1;

     /* saturate if this value is too high */
     if (cpu_is_at91sam9rl()) {
      if (prsc > PRESCALER_VAL(ATMEL_TSADCC_PRESCAL))
       prsc = PRESCALER_VAL(ATMEL_TSADCC_PRESCAL);
     } else {
      if (prsc > PRESCALER_VAL(ATMEL_TSADCC_EPRESCAL))
       prsc = PRESCALER_VAL(ATMEL_TSADCC_EPRESCAL);
     }

    

     dev_info(&pdev->dev, "Prescaler is set at: %d\n", prsc);

     startup_time = (60 * pdata->adc_clock) / (8 * 1000000) - 1;
    

     if (startup_time < 1)
      startup_time = 1;

 

     reg = ATMEL_TSADCC_TSAMOD_TS_ONLY_MODE  |
      ((0x00 << 5) & ATMEL_TSADCC_SLEEP) | /* Normal Mode */
      ((0x01 << 6) & ATMEL_TSADCC_PENDET) | /* Enable Pen Detect */
      (prsc << 8)    |
#if 1

     ((0x13 << 16) & ATMEL_TSADCC_STARTUP) | /* STARTUP */
     ((0x0F << 28) & ATMEL_TSADCC_PENDBC);  /* PENDBC */
#else
      ((startup_time << 16) & ATMEL_TSADCC_STARTUP) |
      ((0x0a << 28) & ATMEL_TSADCC_PENDBC);
#endif

 

     atmel_tsadcc_write(ATMEL_TSADCC_CR, ATMEL_TSADCC_SWRST);
     atmel_tsadcc_write(ATMEL_TSADCC_MR, reg);
     atmel_tsadcc_write(ATMEL_TSADCC_TRGR, ATMEL_TSADCC_TRGMOD_NONE);
     atmel_tsadcc_write(ATMEL_TSADCC_TSR,
          (3 << 24) & ATMEL_TSADCC_TSSHTIM);

     atmel_tsadcc_read(ATMEL_TSADCC_SR);
     atmel_tsadcc_write(ATMEL_TSADCC_IER, ATMEL_TSADCC_PENCNT);

}