Lines Matching refs:z2

81 static void apple_z2_parse_touches(struct apple_z2 *z2,  in apple_z2_parse_touches()  argument
95 slot = input_mt_get_slot_by_key(z2->input_dev, fingers[i].finger); in apple_z2_parse_touches()
97 dev_warn(&z2->spidev->dev, "unable to get slot for finger\n"); in apple_z2_parse_touches()
102 input_mt_slot(z2->input_dev, slot); in apple_z2_parse_touches()
103 if (!input_mt_report_slot_state(z2->input_dev, MT_TOOL_FINGER, slot_valid)) in apple_z2_parse_touches()
105 touchscreen_report_pos(z2->input_dev, &z2->props, in apple_z2_parse_touches()
109 input_report_abs(z2->input_dev, ABS_MT_WIDTH_MAJOR, in apple_z2_parse_touches()
111 input_report_abs(z2->input_dev, ABS_MT_WIDTH_MINOR, in apple_z2_parse_touches()
113 input_report_abs(z2->input_dev, ABS_MT_ORIENTATION, in apple_z2_parse_touches()
115 input_report_abs(z2->input_dev, ABS_MT_TOUCH_MAJOR, in apple_z2_parse_touches()
117 input_report_abs(z2->input_dev, ABS_MT_TOUCH_MINOR, in apple_z2_parse_touches()
120 input_mt_sync_frame(z2->input_dev); in apple_z2_parse_touches()
121 input_sync(z2->input_dev); in apple_z2_parse_touches()
124 static int apple_z2_read_packet(struct apple_z2 *z2) in apple_z2_read_packet() argument
126 struct apple_z2_read_interrupt_cmd *len_cmd = (void *)z2->tx_buf; in apple_z2_read_packet()
133 len_cmd->counter = z2->index_parity + 1; in apple_z2_read_packet()
136 z2->index_parity = !z2->index_parity; in apple_z2_read_packet()
137 xfer.tx_buf = z2->tx_buf; in apple_z2_read_packet()
138 xfer.rx_buf = z2->rx_buf; in apple_z2_read_packet()
141 error = spi_sync_transfer(z2->spidev, &xfer, 1); in apple_z2_read_packet()
145 pkt_len = (get_unaligned_le16(z2->rx_buf + 1) + 8) & 0xfffffffc; in apple_z2_read_packet()
147 error = spi_read(z2->spidev, z2->rx_buf, pkt_len); in apple_z2_read_packet()
151 apple_z2_parse_touches(z2, z2->rx_buf + 5, pkt_len - 5); in apple_z2_read_packet()
158 struct apple_z2 *z2 = data; in apple_z2_irq() local
160 if (unlikely(!z2->booted)) in apple_z2_irq()
161 complete(&z2->boot_irq); in apple_z2_irq()
163 apple_z2_read_packet(z2); in apple_z2_irq()
169 static const u8 *apple_z2_build_cal_blob(struct apple_z2 *z2, in apple_z2_build_cal_blob() argument
181 if (!device_property_present(&z2->spidev->dev, CAL_PROP_NAME)) in apple_z2_build_cal_blob()
184 cal_size = device_property_count_u8(&z2->spidev->dev, CAL_PROP_NAME); in apple_z2_build_cal_blob()
204 error = device_property_read_u8_array(&z2->spidev->dev, CAL_PROP_NAME, in apple_z2_build_cal_blob()
218 static int apple_z2_send_firmware_blob(struct apple_z2 *z2, const u8 *data, in apple_z2_send_firmware_blob() argument
225 z2->tx_buf[0] = 0x1a; in apple_z2_send_firmware_blob()
226 z2->tx_buf[1] = 0xa1; in apple_z2_send_firmware_blob()
237 ack_xfer.tx_buf = z2->tx_buf; in apple_z2_send_firmware_blob()
241 reinit_completion(&z2->boot_irq); in apple_z2_send_firmware_blob()
242 error = spi_sync(z2->spidev, &msg); in apple_z2_send_firmware_blob()
247 wait_for_completion_timeout(&z2->boot_irq, msecs_to_jiffies(20)); in apple_z2_send_firmware_blob()
252 static int apple_z2_upload_firmware(struct apple_z2 *z2) in apple_z2_upload_firmware() argument
263 error = request_firmware(&fw, z2->fw_name, &z2->spidev->dev); in apple_z2_upload_firmware()
265 dev_err(&z2->spidev->dev, "unable to load firmware\n"); in apple_z2_upload_firmware()
271 dev_err(&z2->spidev->dev, "invalid firmware header\n"); in apple_z2_upload_firmware()
282 dev_err(&z2->spidev->dev, "firmware malformed\n"); in apple_z2_upload_firmware()
292 dev_err(&z2->spidev->dev, "firmware malformed\n"); in apple_z2_upload_firmware()
296 error = apple_z2_send_firmware_blob(z2, fw->data + fw_idx, in apple_z2_upload_firmware()
306 apple_z2_build_cal_blob(z2, address, &size); in apple_z2_upload_firmware()
311 error = apple_z2_send_firmware_blob(z2, data, size, false); in apple_z2_upload_firmware()
316 dev_err(&z2->spidev->dev, "firmware malformed\n"); in apple_z2_upload_firmware()
323 z2->booted = true; in apple_z2_upload_firmware()
324 apple_z2_read_packet(z2); in apple_z2_upload_firmware()
328 static int apple_z2_boot(struct apple_z2 *z2) in apple_z2_boot() argument
332 reinit_completion(&z2->boot_irq); in apple_z2_boot()
333 enable_irq(z2->spidev->irq); in apple_z2_boot()
334 gpiod_set_value(z2->reset_gpio, 0); in apple_z2_boot()
335 if (!wait_for_completion_timeout(&z2->boot_irq, msecs_to_jiffies(20))) in apple_z2_boot()
338 error = apple_z2_upload_firmware(z2); in apple_z2_boot()
340 gpiod_set_value(z2->reset_gpio, 1); in apple_z2_boot()
341 disable_irq(z2->spidev->irq); in apple_z2_boot()
351 struct apple_z2 *z2; in apple_z2_probe() local
354 z2 = devm_kzalloc(dev, sizeof(*z2), GFP_KERNEL); in apple_z2_probe()
355 if (!z2) in apple_z2_probe()
358 z2->tx_buf = devm_kzalloc(dev, sizeof(struct apple_z2_read_interrupt_cmd), GFP_KERNEL); in apple_z2_probe()
359 if (!z2->tx_buf) in apple_z2_probe()
362 z2->rx_buf = devm_kzalloc(dev, 4000, GFP_KERNEL); in apple_z2_probe()
363 if (!z2->rx_buf) in apple_z2_probe()
366 z2->spidev = spi; in apple_z2_probe()
367 init_completion(&z2->boot_irq); in apple_z2_probe()
368 spi_set_drvdata(spi, z2); in apple_z2_probe()
371 z2->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); in apple_z2_probe()
372 if (IS_ERR(z2->reset_gpio)) in apple_z2_probe()
373 return dev_err_probe(dev, PTR_ERR(z2->reset_gpio), "unable to get reset\n"); in apple_z2_probe()
375 error = devm_request_threaded_irq(dev, z2->spidev->irq, NULL, apple_z2_irq, in apple_z2_probe()
377 "apple-z2-irq", z2); in apple_z2_probe()
381 error = device_property_read_string(dev, "firmware-name", &z2->fw_name); in apple_z2_probe()
385 z2->input_dev = devm_input_allocate_device(dev); in apple_z2_probe()
386 if (!z2->input_dev) in apple_z2_probe()
389 z2->input_dev->name = (char *)spi_get_device_id(spi)->driver_data; in apple_z2_probe()
390 z2->input_dev->phys = "apple_z2"; in apple_z2_probe()
391 z2->input_dev->id.bustype = BUS_SPI; in apple_z2_probe()
394 input_set_abs_params(z2->input_dev, ABS_MT_POSITION_X, 0, 0, 0, 0); in apple_z2_probe()
395 input_set_abs_params(z2->input_dev, ABS_MT_POSITION_Y, 0, 0, 0, 0); in apple_z2_probe()
396 touchscreen_parse_properties(z2->input_dev, true, &z2->props); in apple_z2_probe()
397 input_abs_set_res(z2->input_dev, ABS_MT_POSITION_X, 100); in apple_z2_probe()
398 input_abs_set_res(z2->input_dev, ABS_MT_POSITION_Y, 100); in apple_z2_probe()
399 input_set_abs_params(z2->input_dev, ABS_MT_WIDTH_MAJOR, 0, 65535, 0, 0); in apple_z2_probe()
400 input_set_abs_params(z2->input_dev, ABS_MT_WIDTH_MINOR, 0, 65535, 0, 0); in apple_z2_probe()
401 input_set_abs_params(z2->input_dev, ABS_MT_TOUCH_MAJOR, 0, 65535, 0, 0); in apple_z2_probe()
402 input_set_abs_params(z2->input_dev, ABS_MT_TOUCH_MINOR, 0, 65535, 0, 0); in apple_z2_probe()
403 input_set_abs_params(z2->input_dev, ABS_MT_ORIENTATION, -32768, 32767, 0, 0); in apple_z2_probe()
405 error = input_mt_init_slots(z2->input_dev, 256, INPUT_MT_DIRECT); in apple_z2_probe()
409 error = input_register_device(z2->input_dev); in apple_z2_probe()
415 error = apple_z2_boot(z2); in apple_z2_probe()
424 struct apple_z2 *z2 = spi_get_drvdata(spi); in apple_z2_shutdown() local
426 disable_irq(z2->spidev->irq); in apple_z2_shutdown()
427 gpiod_direction_output(z2->reset_gpio, 1); in apple_z2_shutdown()
428 z2->booted = false; in apple_z2_shutdown()
440 struct apple_z2 *z2 = spi_get_drvdata(to_spi_device(dev)); in apple_z2_resume() local
442 return apple_z2_boot(z2); in apple_z2_resume()