Proximity Function

Basic Info

Driver will receive info from FW to control screen brightness。

Driving Code

CONFIG_TOUCHSCREEN_FTS_PSENSOR can be found in focaltech_core.h. It is further implemented in focaltech_core.c. The following shows partial parts of its code.

static struct sensors_classdev __maybe_unused sensors_proximity_cdev = {

    .name = "fts-proximity",

    .vendor = "FocalTech",

    .version = 1,

    .handle = SENSORS_PROXIMITY_HANDLE,

    .type = SENSOR_TYPE_PROXIMITY,

    .max_range = "5.0",

    .resolution = "5.0",

    .sensor_power = "0.1",

    .min_delay = 0,

    .fifo_reserved_event_count = 0,

    .fifo_max_event_count = 0,

    .enabled = 0,

    .delay_msec = 200,

    .sensors_enable = NULL,

    .sensors_poll_delay = NULL,

};



static void fts_psensor_enable(struct fts_ts_data *data, int enable){

    unsigned char state;

    int ret = -1;

    if (data->client == NULL)

        return;



    fts_read_reg(data->client, FTS_REG_PSENSOR_ENABLE, &state);

  if (enable)

      state |= FTS_PSENSOR_ENABLE_MASK;

  else

      state &= ~FTS_PSENSOR_ENABLE_MASK;


  ret = fts_write_reg(data->client,FTS_REG_PSENSOR_ENABLE, state);


  if (ret < 0)

  dev_err(&data->client->dev,"write psensor switch command failed\n");


  return;

}




static int fts_psensor_enable_set(struct sensors_classdev *sensors_cdev,unsigned int enable){

    struct fts_psensor_platform_data *psensor_pdata = container_of(sensors_cdev,struct fts_psensor_platform_data, ps_cdev);

    struct fts_ts_data *data = psensor_pdata->data;

    struct input_dev *input_dev = data->psensor_pdat>input_psensor_dev;

  mutex_lock(&input_dev->mutex);

  fts_psensor_enable(data, enable);

  psensor_pdata->tp_psensor_data = FTS_PSENSOR_ORIGINAL_STATE_FAR;

  if (enable){
      psensor_pdata-&gt;tp_psensor_opened = 1;
  }else{
       psensor_pdata-&gt;tp_psensor_opened = 0     
  }


mutex_unlock(&amp;input_dev-&gt;mutex);

return enable;

}



static int fts_read_tp_psensor_data(struct fts_ts_data *data){

  unsigned char psensor_status;

  char tmp;

  int ret = 1;

  fts_read_reg(data->client,FTS_REG_PSENSOR_STATUS,&psensor_status);

  tmp = data->psensor_pdata->tp_psensor_data;


  if (psensor_status == FTS_PSENSOR_STATUS_NEAR){
      data->psensor_pdata->tp_psensor_data = FTS_PSENSOR_FAR_TO_NEAR;
  }else if (psensor_status == FTS_PSENSOR_STATUS_FAR){
      data->psensor_pdata->tp_psensor_data = FTS_PSENSOR_NEAR_TO_FAR;
  }

  if (tmp != data->psensor_pdata->tp_psensor_data) { 
        dev_dbg(&data->client->dev,"%s sensor data changed\n",__func__);
        ret = 0;
  }

  return ret;

}

results matching ""

    No results matching ""