Lines Matching defs:icn8505
3 * Driver for ChipOne icn8505 i2c touchscreen controller
147 static int icn8505_read_data(struct icn8505_data *icn8505, int reg,
150 return icn8505_read_xfer(icn8505->client, icn8505->client->addr, reg,
154 static int icn8505_read_reg_silent(struct icn8505_data *icn8505, int reg)
159 error = icn8505_read_xfer(icn8505->client, icn8505->client->addr, reg,
167 static int icn8505_write_reg(struct icn8505_data *icn8505, int reg, u8 val)
169 return icn8505_write_xfer(icn8505->client, icn8505->client->addr, reg,
173 static int icn8505_read_prog_data(struct icn8505_data *icn8505, int reg,
176 return icn8505_read_xfer(icn8505->client, ICN8505_PROG_I2C_ADDR, reg,
180 static int icn8505_write_prog_data(struct icn8505_data *icn8505, int reg,
183 return icn8505_write_xfer(icn8505->client, ICN8505_PROG_I2C_ADDR, reg,
187 static int icn8505_write_prog_reg(struct icn8505_data *icn8505, int reg, u8 val)
189 return icn8505_write_xfer(icn8505->client, ICN8505_PROG_I2C_ADDR, reg,
199 static int icn8505_try_fw_upload(struct icn8505_data *icn8505,
202 struct device *dev = &icn8505->client->dev;
209 error = icn8505_write_prog_reg(icn8505, 0xcc3355, 0x5a);
215 error = icn8505_write_prog_reg(icn8505, 0x040400, 0x01);
221 error = icn8505_read_prog_data(icn8505, 0x040002, buf, 1);
233 error = icn8505_write_prog_reg(icn8505, 0x40028, 1);
240 error = icn8505_write_prog_data(icn8505, offset,
247 error = icn8505_write_prog_reg(icn8505, 0x40028, 0);
252 error = icn8505_read_prog_data(icn8505, 0x40034, buf, 2);
261 error = icn8505_read_prog_data(icn8505, 0x4002c, buf, 4);
272 error = icn8505_write_prog_reg(icn8505, 0x40400, 0x03);
280 static int icn8505_upload_fw(struct icn8505_data *icn8505)
282 struct device *dev = &icn8505->client->dev;
291 error = firmware_request_platform(&fw, icn8505->firmware_name, dev);
298 if (icn8505_read_reg_silent(icn8505, 0x000a) == 0x85)
302 error = icn8505_try_fw_upload(icn8505, fw);
324 struct icn8505_data *icn8505 = dev_id;
325 struct device *dev = &icn8505->client->dev;
329 error = icn8505_read_data(icn8505, ICN8505_REG_TOUCHDATA,
346 input_mt_slot(icn8505->input, touch->slot);
347 input_mt_report_slot_state(icn8505->input, MT_TOOL_FINGER, act);
351 touchscreen_report_pos(icn8505->input, &icn8505->prop,
357 input_mt_sync_frame(icn8505->input);
358 input_report_key(icn8505->input, KEY_LEFTMETA,
360 input_sync(icn8505->input);
365 static int icn8505_probe_acpi(struct icn8505_data *icn8505, struct device *dev)
377 snprintf(icn8505->firmware_name, sizeof(icn8505->firmware_name),
378 "chipone/icn8505-%s.fw", subsys);
387 struct icn8505_data *icn8505;
397 icn8505 = devm_kzalloc(dev, sizeof(*icn8505), GFP_KERNEL);
398 if (!icn8505)
412 icn8505->client = client;
413 icn8505->input = input;
414 input_set_drvdata(input, icn8505);
416 error = icn8505_probe_acpi(icn8505, dev);
420 error = icn8505_upload_fw(icn8505);
424 error = icn8505_read_data(icn8505, ICN8505_REG_CONFIGDATA,
436 touchscreen_parse_properties(input, true, &icn8505->prop);
449 IRQF_ONESHOT, client->name, icn8505);
459 i2c_set_clientdata(client, icn8505);
465 struct icn8505_data *icn8505 = i2c_get_clientdata(to_i2c_client(dev));
467 disable_irq(icn8505->client->irq);
469 icn8505_write_reg(icn8505, ICN8505_REG_POWER, ICN8505_POWER_HIBERNATE);
476 struct icn8505_data *icn8505 = i2c_get_clientdata(to_i2c_client(dev));
479 error = icn8505_upload_fw(icn8505);
483 enable_irq(icn8505->client->irq);
506 MODULE_DESCRIPTION("ChipOne icn8505 I2C Touchscreen Driver");