• Home
  • Raw
  • Download

Lines Matching +full:fw +full:- +full:gpios

1 // SPDX-License-Identifier: GPL-2.0-only
6 * Copyright (C) 2009-2010 Texas Instruments
34 * st_get_plat_device -
47 * validate_firmware_response -
54 struct sk_buff *skb = kim_gdata->rx_skb; in validate_firmware_response()
63 if (skb->data[2] == 0x01 && skb->data[3] == 0x01 && in validate_firmware_response()
64 skb->data[4] == 0x10 && skb->data[5] == 0x00) { in validate_firmware_response()
65 /* fw version response */ in validate_firmware_response()
66 memcpy(kim_gdata->resp_buffer, in validate_firmware_response()
67 kim_gdata->rx_skb->data, in validate_firmware_response()
68 kim_gdata->rx_skb->len); in validate_firmware_response()
69 kim_gdata->rx_state = ST_W4_PACKET_TYPE; in validate_firmware_response()
70 kim_gdata->rx_skb = NULL; in validate_firmware_response()
71 kim_gdata->rx_count = 0; in validate_firmware_response()
72 } else if (unlikely(skb->data[5] != 0)) { in validate_firmware_response()
73 pr_err("no proper response during fw download"); in validate_firmware_response()
74 pr_err("data6 %x", skb->data[5]); in validate_firmware_response()
79 complete_all(&kim_gdata->kim_rcvd); in validate_firmware_response()
89 register int room = skb_tailroom(kim_gdata->rx_skb); in kim_check_data_len()
102 kfree_skb(kim_gdata->rx_skb); in kim_check_data_len()
105 * Packet header has non-zero payload length and in kim_check_data_len()
108 kim_gdata->rx_state = ST_W4_DATA; in kim_check_data_len()
109 kim_gdata->rx_count = len; in kim_check_data_len()
117 kim_gdata->rx_state = ST_W4_PACKET_TYPE; in kim_check_data_len()
118 kim_gdata->rx_skb = NULL; in kim_check_data_len()
119 kim_gdata->rx_count = 0; in kim_check_data_len()
125 * kim_int_recv - receive function called during firmware download
146 if (kim_gdata->rx_count) { in kim_int_recv()
147 len = min_t(unsigned int, kim_gdata->rx_count, count); in kim_int_recv()
148 skb_put_data(kim_gdata->rx_skb, ptr, len); in kim_int_recv()
149 kim_gdata->rx_count -= len; in kim_int_recv()
150 count -= len; in kim_int_recv()
153 if (kim_gdata->rx_count) in kim_int_recv()
157 switch (kim_gdata->rx_state) { in kim_int_recv()
162 kim_gdata->rx_state = ST_W4_PACKET_TYPE; in kim_int_recv()
163 kim_gdata->rx_skb = NULL; in kim_int_recv()
168 (unsigned char *)&kim_gdata->rx_skb->data[1]; in kim_int_recv()
177 kim_gdata->rx_state = ST_W4_HEADER; in kim_int_recv()
178 kim_gdata->rx_count = 2; in kim_int_recv()
183 count--; in kim_int_recv()
187 count--; in kim_int_recv()
188 kim_gdata->rx_skb = in kim_int_recv()
190 if (!kim_gdata->rx_skb) { in kim_int_recv()
192 kim_gdata->rx_state = ST_W4_PACKET_TYPE; in kim_int_recv()
193 kim_gdata->rx_count = 0; in kim_int_recv()
196 skb_reserve(kim_gdata->rx_skb, 8); in kim_int_recv()
197 kim_gdata->rx_skb->cb[0] = 4; in kim_int_recv()
198 kim_gdata->rx_skb->cb[1] = 0; in kim_int_recv()
212 reinit_completion(&kim_gdata->kim_rcvd); in read_local_version()
213 if (4 != st_int_write(kim_gdata->core_data, read_ver_cmd, 4)) { in read_local_version()
215 return -EIO; in read_local_version()
219 &kim_gdata->kim_rcvd, msecs_to_jiffies(CMD_RESP_TIME)); in read_local_version()
221 pr_err(" waiting for ver info- timed out or received signal"); in read_local_version()
222 return timeout ? -ERESTARTSYS : -ETIMEDOUT; in read_local_version()
224 reinit_completion(&kim_gdata->kim_rcvd); in read_local_version()
231 MAKEWORD(kim_gdata->resp_buffer[12], in read_local_version()
232 kim_gdata->resp_buffer[13]); in read_local_version()
240 sprintf(bts_scr_name, "ti-connectivity/TIInit_%d.%d.%d.bts", in read_local_version()
244 kim_gdata->version.full = version; in read_local_version()
245 kim_gdata->version.chip = chip; in read_local_version()
246 kim_gdata->version.maj_ver = maj_ver; in read_local_version()
247 kim_gdata->version.min_ver = min_ver; in read_local_version()
259 ((struct bts_action *) cur_action)->size; in skip_change_remote_baud()
261 if (((struct bts_action *) nxt_action)->type != ACTION_WAIT_EVENT) { in skip_change_remote_baud()
265 ((struct bts_action *)cur_action)->size; in skip_change_remote_baud()
266 *len = *len - (sizeof(struct bts_action) + in skip_change_remote_baud()
267 ((struct bts_action *)cur_action)->size); in skip_change_remote_baud()
274 * download_firmware -
295 request_firmware(&kim_gdata->fw_entry, bts_scr_name, in download_firmware()
296 &kim_gdata->kim_pdev->dev); in download_firmware()
297 if (unlikely((err != 0) || (kim_gdata->fw_entry->data == NULL) || in download_firmware()
298 (kim_gdata->fw_entry->size == 0))) { in download_firmware()
301 return -EINVAL; in download_firmware()
303 ptr = (void *)kim_gdata->fw_entry->data; in download_firmware()
304 len = kim_gdata->fw_entry->size; in download_firmware()
310 len -= sizeof(struct bts_header); in download_firmware()
314 ((struct bts_action *)ptr)->size, in download_firmware()
315 ((struct bts_action *)ptr)->type); in download_firmware()
317 switch (((struct bts_action *)ptr)->type) { in download_firmware()
320 action_ptr = &(((struct bts_action *)ptr)->data[0]); in download_firmware()
322 (((struct hci_command *)action_ptr)->opcode == in download_firmware()
337 cmd_size = ((struct bts_action *)ptr)->size; in download_firmware()
341 st_get_uart_wr_room(kim_gdata->core_data); in download_firmware()
345 release_firmware(kim_gdata->fw_entry); in download_firmware()
356 release_firmware(kim_gdata->fw_entry); in download_firmware()
357 return -ETIMEDOUT; in download_firmware()
363 reinit_completion(&kim_gdata->kim_rcvd); in download_firmware()
370 err = st_int_write(kim_gdata->core_data, in download_firmware()
371 ((struct bts_action_send *)action_ptr)->data, in download_firmware()
372 ((struct bts_action *)ptr)->size); in download_firmware()
374 release_firmware(kim_gdata->fw_entry); in download_firmware()
385 release_firmware(kim_gdata->fw_entry); in download_firmware()
386 return -EIO; in download_firmware()
392 &kim_gdata->kim_rcvd, in download_firmware()
395 pr_err("response timeout/signaled during fw download "); in download_firmware()
397 release_firmware(kim_gdata->fw_entry); in download_firmware()
398 return err ? -ERESTARTSYS : -ETIMEDOUT; in download_firmware()
400 reinit_completion(&kim_gdata->kim_rcvd); in download_firmware()
404 action_ptr = &(((struct bts_action *)ptr)->data[0]); in download_firmware()
405 mdelay(((struct bts_action_delay *)action_ptr)->msec); in download_firmware()
409 len - (sizeof(struct bts_action) + in download_firmware()
410 ((struct bts_action *)ptr)->size); in download_firmware()
413 ((struct bts_action *)ptr)->size; in download_firmware()
415 /* fw download complete */ in download_firmware()
416 release_firmware(kim_gdata->fw_entry); in download_firmware()
430 struct kim_data_s *kim_gdata = st_gdata->kim_data; in st_kim_recv()
433 * proceed to gather all data and distinguish read fw version response in st_kim_recv()
434 * from other fw responses when data gathering is complete in st_kim_recv()
447 complete(&kim_gdata->ldisc_installed); in st_kim_complete()
451 * st_kim_start - called from ST Core upon 1st registration
453 * the firmware version from chip, forming the fw file name
454 * based on the chip version, requesting the fw, parsing it
465 pdata = kim_gdata->kim_pdev->dev.platform_data; in st_kim_start()
469 if (pdata->chip_enable) in st_kim_start()
470 pdata->chip_enable(kim_gdata); in st_kim_start()
473 gpio_set_value_cansleep(kim_gdata->nshutdown, GPIO_LOW); in st_kim_start()
475 gpio_set_value_cansleep(kim_gdata->nshutdown, GPIO_HIGH); in st_kim_start()
477 /* re-initialize the completion */ in st_kim_start()
478 reinit_completion(&kim_gdata->ldisc_installed); in st_kim_start()
480 kim_gdata->ldisc_install = 1; in st_kim_start()
482 sysfs_notify(&kim_gdata->kim_pdev->dev.kobj, in st_kim_start()
486 &kim_gdata->ldisc_installed, msecs_to_jiffies(LDISC_TIME)); in st_kim_start()
501 * ldisc installed but fw download failed, in st_kim_start()
511 } while (retry--); in st_kim_start()
516 * st_kim_stop - stop communication with chip.
517 * This can be called from ST Core/KIM, on the-
518 * (a) last un-register when chip need not be powered there-after,
520 * The function is responsible to (a) notify UIM about un-installation,
522 * (c) reset BT_EN - pull down nshutdown at the end.
530 kim_gdata->kim_pdev->dev.platform_data; in st_kim_stop()
531 struct tty_struct *tty = kim_gdata->core_data->tty; in st_kim_stop()
533 reinit_completion(&kim_gdata->ldisc_installed); in st_kim_stop()
543 kim_gdata->ldisc_install = 0; in st_kim_stop()
544 sysfs_notify(&kim_gdata->kim_pdev->dev.kobj, NULL, "install"); in st_kim_stop()
546 /* wait for ldisc to be un-installed */ in st_kim_stop()
548 &kim_gdata->ldisc_installed, msecs_to_jiffies(LDISC_TIME)); in st_kim_stop()
550 pr_err(" timed out waiting for ldisc to be un-installed"); in st_kim_stop()
551 err = -ETIMEDOUT; in st_kim_stop()
555 gpio_set_value_cansleep(kim_gdata->nshutdown, GPIO_LOW); in st_kim_stop()
557 gpio_set_value_cansleep(kim_gdata->nshutdown, GPIO_HIGH); in st_kim_stop()
559 gpio_set_value_cansleep(kim_gdata->nshutdown, GPIO_LOW); in st_kim_stop()
562 if (pdata->chip_disable) in st_kim_stop()
563 pdata->chip_disable(kim_gdata); in st_kim_stop()
573 struct kim_data_s *kim_gdata = (struct kim_data_s *)s->private; in version_show()
574 seq_printf(s, "%04X %d.%d.%d\n", kim_gdata->version.full, in version_show()
575 kim_gdata->version.chip, kim_gdata->version.maj_ver, in version_show()
576 kim_gdata->version.min_ver); in version_show()
582 struct kim_data_s *kim_gdata = (struct kim_data_s *)s->private; in list_show()
583 kim_st_list_protocols(kim_gdata->core_data, s); in list_show()
591 return sprintf(buf, "%d\n", kim_data->ldisc_install); in show_install()
600 strncpy(kim_data->dev_name, buf, count); in store_dev_name()
601 pr_debug("stored dev name >%s<", kim_data->dev_name); in store_dev_name()
610 sscanf(buf, "%ld", &kim_data->baud_rate); in store_baud_rate()
611 pr_debug("stored baud rate >%ld<", kim_data->baud_rate); in store_baud_rate()
620 return sprintf(buf, "%s\n", kim_data->dev_name); in show_dev_name()
627 return sprintf(buf, "%d\n", kim_data->baud_rate); in show_baud_rate()
634 return sprintf(buf, "%d\n", kim_data->flow_cntrl); in show_flow_cntrl()
642 #ifdef DEBUG /* TODO: move this to debug-fs if possible */
671 * st_kim_ref - reference the core's data
672 * This references the per-ST platform device in the arch/xx/
673 * board-xx.c file.
689 *core_data = kim_gdata->core_data; in st_kim_ref()
701 * board-*.c file
708 struct ti_st_plat_data *pdata = pdev->dev.platform_data; in kim_probe()
711 if ((pdev->id != -1) && (pdev->id < MAX_ST_DEVICES)) { in kim_probe()
713 st_kim_devices[pdev->id] = pdev; in kim_probe()
722 return -ENOMEM; in kim_probe()
726 err = st_core_init(&kim_gdata->core_data); in kim_probe()
729 err = -EIO; in kim_probe()
733 kim_gdata->core_data->kim_data = kim_gdata; in kim_probe()
736 kim_gdata->nshutdown = pdata->nshutdown_gpio; in kim_probe()
737 err = gpio_request(kim_gdata->nshutdown, "kim"); in kim_probe()
739 pr_err(" gpio %d request failed ", kim_gdata->nshutdown); in kim_probe()
744 err = gpio_direction_output(kim_gdata->nshutdown, 0); in kim_probe()
746 pr_err(" unable to configure gpio %d", kim_gdata->nshutdown); in kim_probe()
750 kim_gdata->kim_pdev = pdev; in kim_probe()
751 init_completion(&kim_gdata->kim_rcvd); in kim_probe()
752 init_completion(&kim_gdata->ldisc_installed); in kim_probe()
754 err = sysfs_create_group(&pdev->dev.kobj, &uim_attr_grp); in kim_probe()
761 strncpy(kim_gdata->dev_name, pdata->dev_name, UART_DEV_NAME_LEN); in kim_probe()
762 kim_gdata->flow_cntrl = pdata->flow_cntrl; in kim_probe()
763 kim_gdata->baud_rate = pdata->baud_rate; in kim_probe()
766 kim_debugfs_dir = debugfs_create_dir("ti-st", NULL); in kim_probe()
775 st_core_exit(kim_gdata->core_data); in kim_probe()
785 /* free the GPIOs requested */ in kim_remove()
786 struct ti_st_plat_data *pdata = pdev->dev.platform_data; in kim_remove()
795 gpio_free(pdata->nshutdown_gpio); in kim_remove()
799 sysfs_remove_group(&pdev->dev.kobj, &uim_attr_grp); in kim_remove()
802 kim_gdata->kim_pdev = NULL; in kim_remove()
803 st_core_exit(kim_gdata->core_data); in kim_remove()
812 struct ti_st_plat_data *pdata = pdev->dev.platform_data; in kim_suspend()
814 if (pdata->suspend) in kim_suspend()
815 return pdata->suspend(pdev, state); in kim_suspend()
822 struct ti_st_plat_data *pdata = pdev->dev.platform_data; in kim_resume()
824 if (pdata->resume) in kim_resume()
825 return pdata->resume(pdev); in kim_resume()