Ejemplo n.º 1
0
/*****************************************************************************************
 *  
 *  function    : gp2a_work_func_prox 
 *  description : This function is for proximity sensor (using B-1 Mode ). 
 *                when INT signal is occured , it gets value from VO register.   
 *
 *                 
 */
static void gp2a_work_func_prox(struct work_struct *work)
{
	struct gp2a_data *gp2a = container_of((struct work_struct *)work,
							struct gp2a_data, work);
	
	char value;
#ifdef PROX_MODE_B
    u8 reg = 0;
#endif

    disable_irq(IRQ_GP2A_INT);

    value = get_ps_vout_value(); 

    input_report_abs(gp2a->input_dev, ABS_X,  value);
    input_sync(gp2a->input_dev);

	gp2a->prox_data= value;
	gprintk("proximity = %d\n",value); //Temp

#ifdef PROX_MODE_B
    if(value == 1) //VO == 0
    {
      reg = 0x40;
      opt_i2c_write(NOT_INT_CLR(REGS_HYS), &reg);
    }
    else
    {
      reg = 0x20;
      opt_i2c_write(NOT_INT_CLR(REGS_HYS), &reg);
    }

    reg = 0x18;
    opt_i2c_write(NOT_INT_CLR(REGS_CON), &reg);
#endif //PROX_MODE_B

    enable_irq(IRQ_GP2A_INT);

#ifdef PROX_MODE_B
    reg = 0x00;
    opt_i2c_write(INT_CLR(REGS_CON), &reg);
#endif //PROX_MODE_B

}
Ejemplo n.º 2
0
irqreturn_t gp2a_irq_handler(int irq, void *ptr)
{
    struct gp2a_data *gp2a = ptr;
    char value;
#ifdef PROX_MODE_B
    u8 reg = 0;
#endif

#ifdef PROX_MODE_A
    value = gpio_get_value_cansleep(gp2a->ps_status);
#else
    opt_i2c_read(0x00, &value, 2);
    value &= 0x01;
    value ^= 0x01;
#endif

    input_report_abs(gp2a->input_dev, ABS_DISTANCE,  value);
    input_sync(gp2a->input_dev);

    gp2a->prox_data = value;

#ifdef PROX_MODE_B
    if (value == 1) {
        reg = 0x40;
        opt_i2c_write(NOT_INT_CLR(REGS_HYS), &reg);
    } else{
        reg = 0x27;
        opt_i2c_write(NOT_INT_CLR(REGS_HYS), &reg);
    }

    reg = 0x18;
    opt_i2c_write(NOT_INT_CLR(REGS_CON), &reg);
#endif

#ifdef PROX_MODE_B
    reg = 0x00;
    opt_i2c_write(INT_CLR(REGS_CON), &reg);
#endif


    return IRQ_HANDLED;
}