Lines Matching refs:qcdev

16 static int quicki2c_init_write_buf(struct quicki2c_device *qcdev, u32 cmd, int cmd_len,  in quicki2c_init_write_buf()  argument
33 memcpy(write_buf, &qcdev->dev_desc.cmd_reg, HIDI2C_REG_LEN); in quicki2c_init_write_buf()
39 memcpy(write_buf + offset, &qcdev->dev_desc.data_reg, HIDI2C_REG_LEN); in quicki2c_init_write_buf()
54 static int quicki2c_encode_cmd(struct quicki2c_device *qcdev, u32 *cmd_buf, in quicki2c_encode_cmd() argument
74 static int write_cmd_to_txdma(struct quicki2c_device *qcdev, int opcode, in write_cmd_to_txdma() argument
81 cmd_len = quicki2c_encode_cmd(qcdev, &cmd, opcode, report_type, report_id); in write_cmd_to_txdma()
83 ret = quicki2c_init_write_buf(qcdev, cmd, cmd_len, buf ? true : false, buf, in write_cmd_to_txdma()
84 buf_len, qcdev->report_buf, qcdev->report_len); in write_cmd_to_txdma()
90 return thc_dma_write(qcdev->thc_hw, qcdev->report_buf, write_buf_len); in write_cmd_to_txdma()
93 int quicki2c_set_power(struct quicki2c_device *qcdev, enum hidi2c_power_state power_state) in quicki2c_set_power() argument
95 return write_cmd_to_txdma(qcdev, HIDI2C_SET_POWER, HIDI2C_RESERVED, power_state, NULL, 0); in quicki2c_set_power()
98 int quicki2c_get_device_descriptor(struct quicki2c_device *qcdev) in quicki2c_get_device_descriptor() argument
103 ret = thc_tic_pio_write_and_read(qcdev->thc_hw, qcdev->hid_desc_addr, in quicki2c_get_device_descriptor()
105 &read_len, (u32 *)&qcdev->dev_desc); in quicki2c_get_device_descriptor()
107 dev_err_once(qcdev->dev, "Get device descriptor failed, ret %d, read len %u\n", in quicki2c_get_device_descriptor()
112 if (le16_to_cpu(qcdev->dev_desc.bcd_ver) != HIDI2C_HID_DESC_BCDVERSION) in quicki2c_get_device_descriptor()
118 int quicki2c_get_report_descriptor(struct quicki2c_device *qcdev) in quicki2c_get_report_descriptor() argument
120 u16 desc_reg = le16_to_cpu(qcdev->dev_desc.report_desc_reg); in quicki2c_get_report_descriptor()
121 size_t read_len = le16_to_cpu(qcdev->dev_desc.report_desc_len); in quicki2c_get_report_descriptor()
124 return thc_swdma_read(qcdev->thc_hw, (u8 *)&desc_reg, HIDI2C_REG_LEN, in quicki2c_get_report_descriptor()
125 &prd_len, qcdev->report_descriptor, &read_len); in quicki2c_get_report_descriptor()
128 int quicki2c_get_report(struct quicki2c_device *qcdev, u8 report_type, in quicki2c_get_report() argument
142 dev_err(qcdev->dev, "Unsupported report type for GET REPORT: %d\n", report_type); in quicki2c_get_report()
146 cmd_len = quicki2c_encode_cmd(qcdev, &cmd, HIDI2C_GET_REPORT, rep_type, reportnum); in quicki2c_get_report()
148 ret = quicki2c_init_write_buf(qcdev, cmd, cmd_len, true, NULL, 0, in quicki2c_get_report()
149 qcdev->report_buf, qcdev->report_len); in quicki2c_get_report()
155 rpt = (struct hidi2c_report_packet *)qcdev->input_buf; in quicki2c_get_report()
157 ret = thc_swdma_read(qcdev->thc_hw, qcdev->report_buf, write_buf_len, in quicki2c_get_report()
160 dev_err_once(qcdev->dev, "Get report failed, ret %d, read len (%zu vs %d)\n", in quicki2c_get_report()
166 dev_err_once(qcdev->dev, "Invalid packet, len (%d vs %d) report id (%d vs %d)\n", in quicki2c_get_report()
176 int quicki2c_set_report(struct quicki2c_device *qcdev, u8 report_type, in quicki2c_set_report() argument
187 dev_err(qcdev->dev, "Unsupported report type for SET REPORT: %d\n", report_type); in quicki2c_set_report()
191 ret = write_cmd_to_txdma(qcdev, HIDI2C_SET_REPORT, rep_type, reportnum, buf, buf_len); in quicki2c_set_report()
193 dev_err_once(qcdev->dev, "Set Report failed, ret %d\n", ret); in quicki2c_set_report()
202 int quicki2c_reset(struct quicki2c_device *qcdev) in quicki2c_reset() argument
204 u16 input_reg = le16_to_cpu(qcdev->dev_desc.input_reg); in quicki2c_reset()
209 qcdev->reset_ack = false; in quicki2c_reset()
210 qcdev->state = QUICKI2C_RESETING; in quicki2c_reset()
212 ret = write_cmd_to_txdma(qcdev, HIDI2C_RESET, HIDI2C_RESERVED, 0, NULL, 0); in quicki2c_reset()
214 dev_err_once(qcdev->dev, "Send reset command failed, ret %d\n", ret); in quicki2c_reset()
218 ret = wait_event_interruptible_timeout(qcdev->reset_ack_wq, qcdev->reset_ack, in quicki2c_reset()
220 if (qcdev->reset_ack) in quicki2c_reset()
227 ret = thc_tic_pio_read(qcdev->thc_hw, input_reg, read_len, &prd_len, in quicki2c_reset()
228 (u32 *)qcdev->input_buf); in quicki2c_reset()
230 dev_err_once(qcdev->dev, "Read Reset Response failed, ret %d\n", ret); in quicki2c_reset()
238 if (get_unaligned_le16(qcdev->input_buf)) { in quicki2c_reset()
239 dev_err_once(qcdev->dev, in quicki2c_reset()
245 qcdev->reset_ack = true; in quicki2c_reset()