static void ir_remocon_work(struct ir_remocon_data *ir_data, int count) { struct ir_remocon_data *data = ir_data; struct i2c_client *client = data->client; int buf_size = count+2; int ret, i; int sleep_timing; int end_data; int emission_time; unsigned long flags; printk(KERN_INFO "%s: total buf_size: %d\n", __func__, buf_size); irda_add_checksum_length(data, count); spin_lock_irqsave(&data->lock, flags); ret = i2c_master_send(client, data->signal, buf_size); if (ret < 0) { dev_err(&client->dev, "%s: err1 %d\n", __func__, ret); ret = i2c_master_send(client, data->signal, buf_size); if (ret < 0) dev_err(&client->dev, "%s: err2 %d\n", __func__, ret); } spin_unlock_irqrestore(&data->lock, flags); /* for (i = 0; i < buf_size; i++) { printk(KERN_INFO "%s: data[%d] : 0x%02x\n", __func__, i, data->signal[i]); } */ data->count = 2; end_data = data->signal[count-2] << 8 | data->signal[count-1]; emission_time = \ (1000 * (data->ir_sum - end_data) / (data->ir_freq)) + 10; sleep_timing = emission_time - 130; if (sleep_timing > 0) msleep(sleep_timing); printk(KERN_INFO "%s: sleep_timing = %d\n", __func__, sleep_timing); #ifndef USE_STOP_MODE data->pdata->ir_vdd_onoff(0); data->on_off = 0; data->pdata->ir_wake_en(0); #endif data->ir_freq = 0; data->ir_sum = 0; }
static void ir_remocon_work(struct ir_remocon_data *ir_data, int count) { struct ir_remocon_data *data = ir_data; struct i2c_client *client = data->client; int buf_size = count+2; int ret; int sleep_timing; int end_data; int emission_time; int ack_pin_onoff; if (count_number >= 100) count_number = 0; count_number++; printk(KERN_INFO "%s: total buf_size: %d\n", __func__, buf_size); irda_add_checksum_length(data, count); mutex_lock(&data->mutex); ret = i2c_master_send(client, data->signal, buf_size); if (ret < 0) { dev_err(&client->dev, "%s: err1 %d\n", __func__, ret); ret = i2c_master_send(client, data->signal, buf_size); if (ret < 0) dev_err(&client->dev, "%s: err2 %d\n", __func__, ret); } mdelay(10); ack_pin_onoff = 0; if (gpio_get_value(data->pdata->irda_irq_gpio)) { printk(KERN_INFO "%s : %d Checksum NG!\n", __func__, count_number); ack_pin_onoff = 1; } else { printk(KERN_INFO "%s : %d Checksum OK!\n", __func__, count_number); ack_pin_onoff = 2; } ack_number = ack_pin_onoff; mutex_unlock(&data->mutex); /* for (int i = 0; i < buf_size; i++) { printk(KERN_INFO "%s: data[%d] : 0x%02x\n", __func__, i, data->signal[i]); } */ data->count = 2; end_data = data->signal[count-2] << 8 | data->signal[count-1]; emission_time = \ (1000 * (data->ir_sum - end_data) / (data->ir_freq)) + 10; sleep_timing = emission_time - 130; if (sleep_timing > 0) msleep(sleep_timing); /* printk(KERN_INFO "%s: sleep_timing = %d\n", __func__, sleep_timing); */ emission_time = \ (1000 * (data->ir_sum) / (data->ir_freq)) + 50; if (emission_time > 0) msleep(emission_time); printk(KERN_INFO "%s: emission_time = %d\n", __func__, emission_time); if (gpio_get_value(data->pdata->irda_irq_gpio)) { printk(KERN_INFO "%s : %d Sending IR OK!\n", __func__, count_number); ack_pin_onoff = 4; } else { printk(KERN_INFO "%s : %d Sending IR NG!\n", __func__, count_number); ack_pin_onoff = 2; } ack_number += ack_pin_onoff; #ifndef USE_STOP_MODE data->pdata->ir_vdd_onoff(0); data->on_off = 0; data->pdata->ir_wake_en(data->pdata,0); #endif data->ir_freq = 0; data->ir_sum = 0; }
static void irda_remocon_work(struct ir_remocon_data *ir_data, int count) { struct ir_remocon_data *data = ir_data; struct i2c_client *client = data->client; int buf_size = count+2; int ret, retry; int sleep_timing; int end_data; int emission_time; int ack_pin_onoff; if (count_number >= 100) count_number = 0; count_number++; gpio_tlmm_config(GPIO_CFG(ir_data->pdata->irda_irq_gpio, 0, GPIO_CFG_INPUT, GPIO_CFG_PULL_UP, GPIO_CFG_2MA), GPIO_CFG_ENABLE); pr_info("%s: total buf_size: %d\n", __func__, buf_size); irda_add_checksum_length(data, count); mutex_lock(&data->mutex); ret = i2c_master_send(client, data->signal, buf_size); if (ret < 0) { dev_err(&client->dev, "%s: err1 %d\n", __func__, ret); ret = i2c_master_send(client, data->signal, buf_size); if (ret < 0) dev_err(&client->dev, "%s: err2 %d\n", __func__, ret); } mdelay(10); ack_pin_onoff = 0; for(retry = 0; retry < 10; retry++) { if (gpio_get_value(data->pdata->irda_irq_gpio)) { if(retry == 9) pr_err("%s : %d Checksum NG!\n", __func__, count_number); ack_pin_onoff = 1; msleep(5); } else { pr_info("%s : %d Checksum OK!\n", __func__, count_number); ack_pin_onoff = 2; break; } } ack_number = ack_pin_onoff; mutex_unlock(&data->mutex); #if 0 for (i = 0; i < buf_size; i++) { printk(KERN_INFO "%s: data[%d] : 0x%02x\n", __func__, i, data->signal[i]); } #endif data->count = 2; end_data = data->signal[count-2] << 8 | data->signal[count-1]; emission_time = \ (1000 * (data->ir_sum - end_data) / (data->ir_freq)) + 10; sleep_timing = emission_time - 130; if (sleep_timing > 0) msleep(sleep_timing); /* printk(KERN_INFO "%s: sleep_timing = %d\n", __func__, sleep_timing); */ emission_time = \ (1000 * (data->ir_sum) / (data->ir_freq)) + 50; if (emission_time > 0) msleep(emission_time); pr_info("%s: emission_time = %d\n", __func__, emission_time); for(retry = 0; retry < 10; retry++) { if (gpio_get_value(data->pdata->irda_irq_gpio)) { pr_info("%s : %d Sending IR OK!\n", __func__, count_number); ack_pin_onoff = 4; break; } else { if(retry == 9) pr_info("%s : %d Sending IR NG!\n", __func__, count_number); ack_pin_onoff = 2; msleep(50); } } ack_number += ack_pin_onoff; #ifndef USE_STOP_MODE data->on_off = 0; data->pdata->ir_wake_en(data->pdata,0); irda_vdd_onoff(0); gpio_set_value(data->pdata->irda_led_en, 0); #endif data->ir_freq = 0; data->ir_sum = 0; gpio_tlmm_config(GPIO_CFG(ir_data->pdata->irda_irq_gpio, 0, GPIO_CFG_INPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA), GPIO_CFG_ENABLE); }