Lines Matching refs:coredev

43 	struct smscore_device_t *coredev;  member
538 struct smscore_device_t *coredev = in smscore_register_hotplug() local
540 rc = hotplug(coredev, coredev->device, 1); in smscore_register_hotplug()
586 static void smscore_notify_clients(struct smscore_device_t *coredev) in smscore_notify_clients() argument
591 while (!list_empty(&coredev->clients)) { in smscore_notify_clients()
592 client = (struct smscore_client_t *) coredev->clients.next; in smscore_notify_clients()
597 static int smscore_notify_callbacks(struct smscore_device_t *coredev, in smscore_notify_callbacks() argument
606 rc = elem->hotplug(coredev, device, arrival); in smscore_notify_callbacks()
643 struct smscore_device_t **coredev, in smscore_register_device() argument
739 *coredev = dev; in smscore_register_device()
748 static int smscore_sendrequest_and_wait(struct smscore_device_t *coredev, in smscore_sendrequest_and_wait() argument
756 rc = coredev->sendrequest_handler(coredev->context, buffer, size); in smscore_sendrequest_and_wait()
772 static int smscore_init_ir(struct smscore_device_t *coredev) in smscore_init_ir() argument
778 coredev->ir.dev = NULL; in smscore_init_ir()
779 ir_io = sms_get_board(smscore_get_board_id(coredev))->board_cfg.ir; in smscore_init_ir()
782 rc = sms_ir_init(coredev); in smscore_init_ir()
789 GFP_KERNEL | coredev->gfp_buf_flags); in smscore_init_ir()
798 msg->msg_data[0] = coredev->ir.controller; in smscore_init_ir()
799 msg->msg_data[1] = coredev->ir.timeout; in smscore_init_ir()
801 rc = smscore_sendrequest_and_wait(coredev, msg, in smscore_init_ir()
803 &coredev->ir_init_done); in smscore_init_ir()
823 static int smscore_configure_board(struct smscore_device_t *coredev) in smscore_configure_board() argument
827 board = sms_get_board(coredev->board_id); in smscore_configure_board()
844 coredev->sendrequest_handler(coredev->context, &mtu_msg, in smscore_configure_board()
857 coredev->sendrequest_handler(coredev->context, &crys_msg, in smscore_configure_board()
872 int smscore_start_device(struct smscore_device_t *coredev) in smscore_start_device() argument
875 int board_id = smscore_get_board_id(coredev); in smscore_start_device()
876 int mode = smscore_registry_getmode(coredev->devpath); in smscore_start_device()
882 rc = smscore_set_device_mode(coredev, mode); in smscore_start_device()
887 rc = smscore_configure_board(coredev); in smscore_start_device()
895 rc = smscore_notify_callbacks(coredev, coredev->device, 1); in smscore_start_device()
896 smscore_init_ir(coredev); in smscore_start_device()
898 pr_debug("device %p started, rc %d\n", coredev, rc); in smscore_start_device()
907 static int smscore_load_firmware_family2(struct smscore_device_t *coredev, in smscore_load_firmware_family2() argument
923 if (coredev->preload_handler) { in smscore_load_firmware_family2()
924 rc = coredev->preload_handler(coredev->context); in smscore_load_firmware_family2()
930 msg = kmalloc(PAGE_SIZE, GFP_KERNEL | coredev->gfp_buf_flags); in smscore_load_firmware_family2()
934 if (coredev->mode != DEVICE_MODE_NONE) { in smscore_load_firmware_family2()
938 rc = smscore_sendrequest_and_wait(coredev, msg, in smscore_load_firmware_family2()
940 &coredev->reload_start_done); in smscore_load_firmware_family2()
964 rc = smscore_sendrequest_and_wait(coredev, data_msg, in smscore_load_firmware_family2()
966 &coredev->data_download_done); in smscore_load_firmware_family2()
985 rc = smscore_sendrequest_and_wait(coredev, msg, in smscore_load_firmware_family2()
987 &coredev->data_validity_done); in smscore_load_firmware_family2()
991 if (coredev->mode == DEVICE_MODE_NONE) { in smscore_load_firmware_family2()
1008 rc = smscore_sendrequest_and_wait(coredev, trigger_msg, in smscore_load_firmware_family2()
1010 &coredev->trigger_done); in smscore_load_firmware_family2()
1014 rc = coredev->sendrequest_handler(coredev->context, msg, in smscore_load_firmware_family2()
1030 if (coredev->postload_handler) { in smscore_load_firmware_family2()
1032 rc, coredev->postload_handler); in smscore_load_firmware_family2()
1034 return coredev->postload_handler(coredev->context); in smscore_load_firmware_family2()
1101 static char *smscore_get_fw_filename(struct smscore_device_t *coredev, in smscore_get_fw_filename() argument
1105 int board_id = smscore_get_board_id(coredev); in smscore_get_fw_filename()
1108 type = smscore_registry_gettype(coredev->devpath); in smscore_get_fw_filename()
1138 static int smscore_load_firmware_from_file(struct smscore_device_t *coredev, in smscore_load_firmware_from_file() argument
1147 char *fw_filename = smscore_get_fw_filename(coredev, mode); in smscore_load_firmware_from_file()
1155 !(coredev->device_flags & SMS_DEVICE_FAMILY2)) in smscore_load_firmware_from_file()
1158 rc = request_firmware(&fw, fw_filename, coredev->device); in smscore_load_firmware_from_file()
1165 SMS_ALLOC_ALIGNMENT), GFP_KERNEL | coredev->gfp_buf_flags); in smscore_load_firmware_from_file()
1173 rc = (coredev->device_flags & SMS_DEVICE_FAMILY2) ? in smscore_load_firmware_from_file()
1174 smscore_load_firmware_family2(coredev, fw_buf, fw_buf_size) in smscore_load_firmware_from_file()
1175 : loadfirmware_handler(coredev->context, fw_buf, in smscore_load_firmware_from_file()
1194 void smscore_unregister_device(struct smscore_device_t *coredev) in smscore_unregister_device() argument
1203 sms_ir_exit(coredev); in smscore_unregister_device()
1205 smscore_notify_clients(coredev); in smscore_unregister_device()
1206 smscore_notify_callbacks(coredev, NULL, 0); in smscore_unregister_device()
1212 while (!list_empty(&coredev->buffers)) { in smscore_unregister_device()
1213 cb = (struct smscore_buffer_t *) coredev->buffers.next; in smscore_unregister_device()
1218 if (num_buffers == coredev->num_buffers) in smscore_unregister_device()
1226 coredev->num_buffers - num_buffers); in smscore_unregister_device()
1234 if (coredev->common_buffer) { in smscore_unregister_device()
1235 if (coredev->usb_device) in smscore_unregister_device()
1236 kfree(coredev->common_buffer); in smscore_unregister_device()
1238 dma_free_coherent(coredev->device, in smscore_unregister_device()
1239 coredev->common_buffer_size, in smscore_unregister_device()
1240 coredev->common_buffer, in smscore_unregister_device()
1241 coredev->common_buffer_phys); in smscore_unregister_device()
1243 kfree(coredev->fw_buf); in smscore_unregister_device()
1245 list_del(&coredev->entry); in smscore_unregister_device()
1246 kfree(coredev); in smscore_unregister_device()
1250 pr_debug("device %p destroyed\n", coredev); in smscore_unregister_device()
1254 static int smscore_detect_mode(struct smscore_device_t *coredev) in smscore_detect_mode() argument
1257 GFP_KERNEL | coredev->gfp_buf_flags); in smscore_detect_mode()
1268 rc = smscore_sendrequest_and_wait(coredev, msg, msg->msg_length, in smscore_detect_mode()
1269 &coredev->version_ex_done); in smscore_detect_mode()
1273 if (wait_for_completion_timeout(&coredev->resume_done, in smscore_detect_mode()
1276 coredev, msg, msg->msg_length, in smscore_detect_mode()
1277 &coredev->version_ex_done); in smscore_detect_mode()
1299 static int smscore_init_device(struct smscore_device_t *coredev, int mode) in smscore_init_device() argument
1306 SMS_DMA_ALIGNMENT, GFP_KERNEL | coredev->gfp_buf_flags); in smscore_init_device()
1315 rc = smscore_sendrequest_and_wait(coredev, msg, in smscore_init_device()
1317 &coredev->init_device_done); in smscore_init_device()
1333 int smscore_set_device_mode(struct smscore_device_t *coredev, int mode) in smscore_set_device_mode() argument
1338 if (coredev->device_flags & SMS_DEVICE_FAMILY2) { in smscore_set_device_mode()
1344 smscore_registry_setmode(coredev->devpath, mode); in smscore_set_device_mode()
1346 if (!(coredev->device_flags & SMS_DEVICE_NOT_READY)) { in smscore_set_device_mode()
1347 rc = smscore_detect_mode(coredev); in smscore_set_device_mode()
1354 if (coredev->mode == mode) { in smscore_set_device_mode()
1359 if (!(coredev->modes_supported & (1 << mode))) { in smscore_set_device_mode()
1360 rc = smscore_load_firmware_from_file(coredev, in smscore_set_device_mode()
1368 if (coredev->fw_version >= 0x800) { in smscore_set_device_mode()
1369 rc = smscore_init_device(coredev, mode); in smscore_set_device_mode()
1379 smscore_registry_setmode(coredev->devpath, mode); in smscore_set_device_mode()
1381 if (coredev->detectmode_handler) in smscore_set_device_mode()
1382 coredev->detectmode_handler(coredev->context, in smscore_set_device_mode()
1383 &coredev->mode); in smscore_set_device_mode()
1385 if (coredev->mode != mode && coredev->setmode_handler) in smscore_set_device_mode()
1386 rc = coredev->setmode_handler(coredev->context, mode); in smscore_set_device_mode()
1391 coredev->mode = mode; in smscore_set_device_mode()
1392 coredev->device_flags &= ~SMS_DEVICE_NOT_READY; in smscore_set_device_mode()
1395 SMS_DMA_ALIGNMENT, GFP_KERNEL | coredev->gfp_buf_flags); in smscore_set_device_mode()
1404 coredev, msg, msg->x_msg_header.msg_length, in smscore_set_device_mode()
1405 &coredev->init_device_done); in smscore_set_device_mode()
1427 int smscore_get_device_mode(struct smscore_device_t *coredev) in smscore_get_device_mode() argument
1429 return coredev->mode; in smscore_get_device_mode()
1444 smscore_client_t *smscore_find_client(struct smscore_device_t *coredev, in smscore_find_client() argument
1453 spin_lock_irqsave(&coredev->clientslock, flags); in smscore_find_client()
1454 first = &coredev->clients; in smscore_find_client()
1466 spin_unlock_irqrestore(&coredev->clientslock, flags); in smscore_find_client()
1479 void smscore_onresponse(struct smscore_device_t *coredev, in smscore_onresponse() argument
1505 if (coredev->mode == DEVICE_MODE_DVBT_BDA) in smscore_onresponse()
1510 client = smscore_find_client(coredev, phdr->msg_type, phdr->msg_dst_id); in smscore_onresponse()
1541 coredev->mode = ver->firmware_id == 255 ? in smscore_onresponse()
1543 coredev->modes_supported = ver->supported_protocols; in smscore_onresponse()
1544 coredev->fw_version = ver->rom_ver_major << 8 | in smscore_onresponse()
1547 complete(&coredev->version_ex_done); in smscore_onresponse()
1551 complete(&coredev->init_device_done); in smscore_onresponse()
1554 complete(&coredev->reload_start_done); in smscore_onresponse()
1562 complete(&coredev->data_validity_done); in smscore_onresponse()
1566 complete(&coredev->data_download_done); in smscore_onresponse()
1571 complete(&coredev->trigger_done); in smscore_onresponse()
1574 complete(&coredev->resume_done); in smscore_onresponse()
1577 complete(&coredev->gpio_configuration_done); in smscore_onresponse()
1580 complete(&coredev->gpio_set_level_done); in smscore_onresponse()
1585 coredev->gpio_get_res = msgdata[1]; in smscore_onresponse()
1587 coredev->gpio_get_res); in smscore_onresponse()
1588 complete(&coredev->gpio_get_level_done); in smscore_onresponse()
1592 complete(&coredev->ir_init_done); in smscore_onresponse()
1595 sms_ir_event(coredev, in smscore_onresponse()
1618 smscore_putbuffer(coredev, cb); in smscore_onresponse()
1632 static struct smscore_buffer_t *get_entry(struct smscore_device_t *coredev) in get_entry() argument
1637 spin_lock_irqsave(&coredev->bufferslock, flags); in get_entry()
1638 if (!list_empty(&coredev->buffers)) { in get_entry()
1639 cb = (struct smscore_buffer_t *) coredev->buffers.next; in get_entry()
1642 spin_unlock_irqrestore(&coredev->bufferslock, flags); in get_entry()
1646 struct smscore_buffer_t *smscore_getbuffer(struct smscore_device_t *coredev) in smscore_getbuffer() argument
1650 wait_event(coredev->buffer_mng_waitq, (cb = get_entry(coredev))); in smscore_getbuffer()
1664 void smscore_putbuffer(struct smscore_device_t *coredev, in smscore_putbuffer() argument
1666 wake_up_interruptible(&coredev->buffer_mng_waitq); in smscore_putbuffer()
1667 list_add_locked(&cb->entry, &coredev->buffers, &coredev->bufferslock); in smscore_putbuffer()
1671 static int smscore_validate_client(struct smscore_device_t *coredev, in smscore_validate_client() argument
1682 registered_client = smscore_find_client(coredev, data_type, id); in smscore_validate_client()
1697 &coredev->clientslock); in smscore_validate_client()
1715 int smscore_register_client(struct smscore_device_t *coredev, in smscore_register_client() argument
1721 if (smscore_find_client(coredev, params->data_type, in smscore_register_client()
1732 newclient->coredev = coredev; in smscore_register_client()
1736 list_add_locked(&newclient->entry, &coredev->clients, in smscore_register_client()
1737 &coredev->clientslock); in smscore_register_client()
1738 smscore_validate_client(coredev, newclient, params->data_type, in smscore_register_client()
1757 struct smscore_device_t *coredev = client->coredev; in smscore_unregister_client() local
1760 spin_lock_irqsave(&coredev->clientslock, flags); in smscore_unregister_client()
1775 spin_unlock_irqrestore(&coredev->clientslock, flags); in smscore_unregister_client()
1793 struct smscore_device_t *coredev; in smsclient_sendrequest() local
1802 coredev = client->coredev; in smsclient_sendrequest()
1805 if (!coredev) { in smsclient_sendrequest()
1810 rc = smscore_validate_client(client->coredev, client, 0, in smsclient_sendrequest()
1815 return coredev->sendrequest_handler(coredev->context, buffer, size); in smsclient_sendrequest()
1821 int smscore_configure_gpio(struct smscore_device_t *coredev, u32 pin, in smscore_configure_gpio() argument
1829 if (coredev->device_flags & SMS_DEVICE_FAMILY2) { in smscore_configure_gpio()
1863 return coredev->sendrequest_handler(coredev->context, in smscore_configure_gpio()
1867 int smscore_set_gpio(struct smscore_device_t *coredev, u32 pin, int level) in smscore_set_gpio() argument
1887 return coredev->sendrequest_handler(coredev->context, in smscore_set_gpio()
1942 int smscore_gpio_configure(struct smscore_device_t *coredev, u8 pin_num, in smscore_gpio_configure() argument
1968 GFP_KERNEL | coredev->gfp_buf_flags); in smscore_gpio_configure()
1980 if (!(coredev->device_flags & SMS_DEVICE_FAMILY2)) { in smscore_gpio_configure()
2006 rc = smscore_sendrequest_and_wait(coredev, p_msg, total_len, in smscore_gpio_configure()
2007 &coredev->gpio_configuration_done); in smscore_gpio_configure()
2021 int smscore_gpio_set_level(struct smscore_device_t *coredev, u8 pin_num, in smscore_gpio_set_level() argument
2040 GFP_KERNEL | coredev->gfp_buf_flags); in smscore_gpio_set_level()
2055 rc = smscore_sendrequest_and_wait(coredev, p_msg, total_len, in smscore_gpio_set_level()
2056 &coredev->gpio_set_level_done); in smscore_gpio_set_level()
2069 int smscore_gpio_get_level(struct smscore_device_t *coredev, u8 pin_num, in smscore_gpio_get_level() argument
2088 GFP_KERNEL | coredev->gfp_buf_flags); in smscore_gpio_get_level()
2103 rc = smscore_sendrequest_and_wait(coredev, p_msg, total_len, in smscore_gpio_get_level()
2104 &coredev->gpio_get_level_done); in smscore_gpio_get_level()
2117 *level = coredev->gpio_get_res; in smscore_gpio_get_level()