icn8505 147 drivers/input/touchscreen/chipone_icn8505.c static int icn8505_read_data(struct icn8505_data *icn8505, int reg, icn8505 150 drivers/input/touchscreen/chipone_icn8505.c return icn8505_read_xfer(icn8505->client, icn8505->client->addr, reg, icn8505 154 drivers/input/touchscreen/chipone_icn8505.c static int icn8505_read_reg_silent(struct icn8505_data *icn8505, int reg) icn8505 159 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_read_xfer(icn8505->client, icn8505->client->addr, reg, icn8505 167 drivers/input/touchscreen/chipone_icn8505.c static int icn8505_write_reg(struct icn8505_data *icn8505, int reg, u8 val) icn8505 169 drivers/input/touchscreen/chipone_icn8505.c return icn8505_write_xfer(icn8505->client, icn8505->client->addr, reg, icn8505 173 drivers/input/touchscreen/chipone_icn8505.c static int icn8505_read_prog_data(struct icn8505_data *icn8505, int reg, icn8505 176 drivers/input/touchscreen/chipone_icn8505.c return icn8505_read_xfer(icn8505->client, ICN8505_PROG_I2C_ADDR, reg, icn8505 180 drivers/input/touchscreen/chipone_icn8505.c static int icn8505_write_prog_data(struct icn8505_data *icn8505, int reg, icn8505 183 drivers/input/touchscreen/chipone_icn8505.c return icn8505_write_xfer(icn8505->client, ICN8505_PROG_I2C_ADDR, reg, icn8505 187 drivers/input/touchscreen/chipone_icn8505.c static int icn8505_write_prog_reg(struct icn8505_data *icn8505, int reg, u8 val) icn8505 189 drivers/input/touchscreen/chipone_icn8505.c return icn8505_write_xfer(icn8505->client, ICN8505_PROG_I2C_ADDR, reg, icn8505 199 drivers/input/touchscreen/chipone_icn8505.c static int icn8505_try_fw_upload(struct icn8505_data *icn8505, icn8505 202 drivers/input/touchscreen/chipone_icn8505.c struct device *dev = &icn8505->client->dev; icn8505 209 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_write_prog_reg(icn8505, 0xcc3355, 0x5a); icn8505 215 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_write_prog_reg(icn8505, 0x040400, 0x01); icn8505 221 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_read_prog_data(icn8505, 0x040002, buf, 1); icn8505 233 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_write_prog_reg(icn8505, 0x40028, 1); icn8505 240 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_write_prog_data(icn8505, offset, icn8505 247 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_write_prog_reg(icn8505, 0x40028, 0); icn8505 252 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_read_prog_data(icn8505, 0x40034, buf, 2); icn8505 261 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_read_prog_data(icn8505, 0x4002c, buf, 4); icn8505 272 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_write_prog_reg(icn8505, 0x40400, 0x03); icn8505 280 drivers/input/touchscreen/chipone_icn8505.c static int icn8505_upload_fw(struct icn8505_data *icn8505) icn8505 282 drivers/input/touchscreen/chipone_icn8505.c struct device *dev = &icn8505->client->dev; icn8505 291 drivers/input/touchscreen/chipone_icn8505.c error = request_firmware(&fw, icn8505->firmware_name, dev); icn8505 298 drivers/input/touchscreen/chipone_icn8505.c if (icn8505_read_reg_silent(icn8505, 0x000a) == 0x85) icn8505 302 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_try_fw_upload(icn8505, fw); icn8505 324 drivers/input/touchscreen/chipone_icn8505.c struct icn8505_data *icn8505 = dev_id; icn8505 325 drivers/input/touchscreen/chipone_icn8505.c struct device *dev = &icn8505->client->dev; icn8505 329 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_read_data(icn8505, ICN8505_REG_TOUCHDATA, icn8505 346 drivers/input/touchscreen/chipone_icn8505.c input_mt_slot(icn8505->input, touch->slot); icn8505 347 drivers/input/touchscreen/chipone_icn8505.c input_mt_report_slot_state(icn8505->input, MT_TOOL_FINGER, act); icn8505 351 drivers/input/touchscreen/chipone_icn8505.c touchscreen_report_pos(icn8505->input, &icn8505->prop, icn8505 357 drivers/input/touchscreen/chipone_icn8505.c input_mt_sync_frame(icn8505->input); icn8505 358 drivers/input/touchscreen/chipone_icn8505.c input_report_key(icn8505->input, KEY_LEFTMETA, icn8505 360 drivers/input/touchscreen/chipone_icn8505.c input_sync(icn8505->input); icn8505 365 drivers/input/touchscreen/chipone_icn8505.c static int icn8505_probe_acpi(struct icn8505_data *icn8505, struct device *dev) icn8505 389 drivers/input/touchscreen/chipone_icn8505.c snprintf(icn8505->firmware_name, sizeof(icn8505->firmware_name), icn8505 399 drivers/input/touchscreen/chipone_icn8505.c struct icn8505_data *icn8505; icn8505 409 drivers/input/touchscreen/chipone_icn8505.c icn8505 = devm_kzalloc(dev, sizeof(*icn8505), GFP_KERNEL); icn8505 410 drivers/input/touchscreen/chipone_icn8505.c if (!icn8505) icn8505 424 drivers/input/touchscreen/chipone_icn8505.c icn8505->client = client; icn8505 425 drivers/input/touchscreen/chipone_icn8505.c icn8505->input = input; icn8505 426 drivers/input/touchscreen/chipone_icn8505.c input_set_drvdata(input, icn8505); icn8505 428 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_probe_acpi(icn8505, dev); icn8505 432 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_upload_fw(icn8505); icn8505 436 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_read_data(icn8505, ICN8505_REG_CONFIGDATA, icn8505 448 drivers/input/touchscreen/chipone_icn8505.c touchscreen_parse_properties(input, true, &icn8505->prop); icn8505 461 drivers/input/touchscreen/chipone_icn8505.c IRQF_ONESHOT, client->name, icn8505); icn8505 471 drivers/input/touchscreen/chipone_icn8505.c i2c_set_clientdata(client, icn8505); icn8505 477 drivers/input/touchscreen/chipone_icn8505.c struct icn8505_data *icn8505 = i2c_get_clientdata(to_i2c_client(dev)); icn8505 479 drivers/input/touchscreen/chipone_icn8505.c disable_irq(icn8505->client->irq); icn8505 481 drivers/input/touchscreen/chipone_icn8505.c icn8505_write_reg(icn8505, ICN8505_REG_POWER, ICN8505_POWER_HIBERNATE); icn8505 488 drivers/input/touchscreen/chipone_icn8505.c struct icn8505_data *icn8505 = i2c_get_clientdata(to_i2c_client(dev)); icn8505 491 drivers/input/touchscreen/chipone_icn8505.c error = icn8505_upload_fw(icn8505); icn8505 495 drivers/input/touchscreen/chipone_icn8505.c enable_irq(icn8505->client->irq);