Lines Matching refs:data
18 #define SSP_DEV (&data->spi->dev)
19 #define SSP_GET_MESSAGE_TYPE(data) (data & (3 << SSP_RW)) argument
41 __le32 data; member
85 static struct ssp_msg *ssp_create_msg(u8 cmd, u16 len, u16 opt, u32 data) in ssp_create_msg() argument
97 h.data = cpu_to_le32(data); in ssp_create_msg()
164 static int ssp_check_lines(struct ssp_data *data, bool state) in ssp_check_lines() argument
168 gpio_set_value_cansleep(data->ap_mcu_gpio, state); in ssp_check_lines()
170 while (gpio_get_value_cansleep(data->mcu_ap_gpio) != state) { in ssp_check_lines()
173 if (data->shut_down || delay_cnt++ > 500) { in ssp_check_lines()
178 gpio_set_value_cansleep(data->ap_mcu_gpio, 1); in ssp_check_lines()
187 static int ssp_do_transfer(struct ssp_data *data, struct ssp_msg *msg, in ssp_do_transfer() argument
197 if (data->shut_down) in ssp_do_transfer()
202 mutex_lock(&data->comm_lock); in ssp_do_transfer()
204 status = ssp_check_lines(data, false); in ssp_do_transfer()
208 status = spi_write(data->spi, msg->buffer, SSP_HEADER_SIZE); in ssp_do_transfer()
210 gpio_set_value_cansleep(data->ap_mcu_gpio, 1); in ssp_do_transfer()
216 mutex_lock(&data->pending_lock); in ssp_do_transfer()
217 list_add_tail(&msg->list, &data->pending_list); in ssp_do_transfer()
218 mutex_unlock(&data->pending_lock); in ssp_do_transfer()
221 status = ssp_check_lines(data, true); in ssp_do_transfer()
224 mutex_lock(&data->pending_lock); in ssp_do_transfer()
226 mutex_unlock(&data->pending_lock); in ssp_do_transfer()
231 mutex_unlock(&data->comm_lock); in ssp_do_transfer()
237 mutex_lock(&data->pending_lock); in ssp_do_transfer()
239 mutex_unlock(&data->pending_lock); in ssp_do_transfer()
241 data->timeout_cnt++; in ssp_do_transfer()
248 mutex_unlock(&data->comm_lock); in ssp_do_transfer()
249 data->timeout_cnt++; in ssp_do_transfer()
253 static inline int ssp_spi_sync_command(struct ssp_data *data, in ssp_spi_sync_command() argument
256 return ssp_do_transfer(data, msg, NULL, 0); in ssp_spi_sync_command()
259 static int ssp_spi_sync(struct ssp_data *data, struct ssp_msg *msg, in ssp_spi_sync() argument
267 return ssp_do_transfer(data, msg, &done, timeout); in ssp_spi_sync()
270 static int ssp_handle_big_data(struct ssp_data *data, char *dataframe, int *idx) in ssp_handle_big_data() argument
277 static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len) in ssp_parse_dataframe() argument
282 struct iio_dev **indio_devs = data->sensor_devs; in ssp_parse_dataframe()
301 data->timestamp); in ssp_parse_dataframe()
320 ssp_handle_big_data(data, dataframe, &idx); in ssp_parse_dataframe()
323 data->time_syncing = true; in ssp_parse_dataframe()
326 ssp_queue_ssp_refresh_task(data, 0); in ssp_parse_dataframe()
331 if (data->time_syncing) in ssp_parse_dataframe()
332 data->timestamp = ts.tv_sec * 1000000000ULL + ts.tv_nsec; in ssp_parse_dataframe()
338 int ssp_irq_msg(struct ssp_data *data) in ssp_irq_msg() argument
347 ret = spi_read(data->spi, data->header_buffer, SSP_HEADER_BUFFER_SIZE); in ssp_irq_msg()
353 length = le16_to_cpu(data->header_buffer[1]); in ssp_irq_msg()
354 msg_options = le16_to_cpu(data->header_buffer[0]); in ssp_irq_msg()
370 mutex_lock(&data->pending_lock); in ssp_irq_msg()
371 list_for_each_entry_safe(msg, n, &data->pending_list, list) { in ssp_irq_msg()
392 ret = spi_read(data->spi, buffer, length); in ssp_irq_msg()
405 ret = spi_read(data->spi, in ssp_irq_msg()
410 ret = spi_write(data->spi, in ssp_irq_msg()
418 list_add_tail(&msg->list, &data->pending_list); in ssp_irq_msg()
427 mutex_unlock(&data->pending_lock); in ssp_irq_msg()
434 ret = spi_read(data->spi, buffer, length); in ssp_irq_msg()
441 ret = ssp_parse_dataframe(data, buffer, length); in ssp_irq_msg()
454 void ssp_clean_pending_list(struct ssp_data *data) in ssp_clean_pending_list() argument
458 mutex_lock(&data->pending_lock); in ssp_clean_pending_list()
459 list_for_each_entry_safe(msg, n, &data->pending_list, list) { in ssp_clean_pending_list()
466 mutex_unlock(&data->pending_lock); in ssp_clean_pending_list()
469 int ssp_command(struct ssp_data *data, char command, int arg) in ssp_command() argument
480 ret = ssp_spi_sync_command(data, msg); in ssp_command()
486 int ssp_send_instruction(struct ssp_data *data, u8 inst, u8 sensor_type, in ssp_send_instruction() argument
492 if (data->fw_dl_state == SSP_FW_DL_STATE_DOWNLOADING) { in ssp_send_instruction()
494 __func__, data->fw_dl_state); in ssp_send_instruction()
496 } else if (!(data->available_sensors & BIT(sensor_type)) && in ssp_send_instruction()
513 ret = ssp_spi_sync(data, msg, 1000); in ssp_send_instruction()
519 int ssp_get_chipid(struct ssp_data *data) in ssp_get_chipid() argument
529 ret = ssp_spi_sync(data, msg, 1000); in ssp_get_chipid()
538 int ssp_set_magnetic_matrix(struct ssp_data *data) in ssp_set_magnetic_matrix() argument
544 data->sensorhub_info->mag_length, SSP_AP2HUB_WRITE, in ssp_set_magnetic_matrix()
549 ssp_fill_buffer(msg, 0, data->sensorhub_info->mag_table, in ssp_set_magnetic_matrix()
550 data->sensorhub_info->mag_length); in ssp_set_magnetic_matrix()
552 ret = ssp_spi_sync(data, msg, 1000); in ssp_set_magnetic_matrix()
558 unsigned int ssp_get_sensor_scanning_info(struct ssp_data *data) in ssp_get_sensor_scanning_info() argument
569 ret = ssp_spi_sync(data, msg, 1000); in ssp_get_sensor_scanning_info()
585 unsigned int ssp_get_firmware_rev(struct ssp_data *data) in ssp_get_firmware_rev() argument
595 ret = ssp_spi_sync(data, msg, 1000); in ssp_get_firmware_rev()