Lines Matching refs:coredev
55 struct smscore_device_t *coredev; member
552 struct smscore_device_t *coredev = in smscore_register_hotplug() local
554 rc = hotplug(coredev, coredev->device, 1); in smscore_register_hotplug()
600 static void smscore_notify_clients(struct smscore_device_t *coredev) in smscore_notify_clients() argument
605 while (!list_empty(&coredev->clients)) { in smscore_notify_clients()
606 client = (struct smscore_client_t *) coredev->clients.next; in smscore_notify_clients()
611 static int smscore_notify_callbacks(struct smscore_device_t *coredev, in smscore_notify_callbacks() argument
620 rc = elem->hotplug(coredev, device, arrival); in smscore_notify_callbacks()
656 struct smscore_device_t **coredev, in smscore_register_device() argument
745 *coredev = dev; in smscore_register_device()
754 static int smscore_sendrequest_and_wait(struct smscore_device_t *coredev, in smscore_sendrequest_and_wait() argument
762 rc = coredev->sendrequest_handler(coredev->context, buffer, size); in smscore_sendrequest_and_wait()
778 static int smscore_init_ir(struct smscore_device_t *coredev) in smscore_init_ir() argument
784 coredev->ir.dev = NULL; in smscore_init_ir()
785 ir_io = sms_get_board(smscore_get_board_id(coredev))->board_cfg.ir; in smscore_init_ir()
788 rc = sms_ir_init(coredev); in smscore_init_ir()
804 msg->msg_data[0] = coredev->ir.controller; in smscore_init_ir()
805 msg->msg_data[1] = coredev->ir.timeout; in smscore_init_ir()
807 rc = smscore_sendrequest_and_wait(coredev, msg, in smscore_init_ir()
809 &coredev->ir_init_done); in smscore_init_ir()
829 static int smscore_configure_board(struct smscore_device_t *coredev) in smscore_configure_board() argument
833 board = sms_get_board(coredev->board_id); in smscore_configure_board()
850 coredev->sendrequest_handler(coredev->context, &mtu_msg, in smscore_configure_board()
863 coredev->sendrequest_handler(coredev->context, &crys_msg, in smscore_configure_board()
878 int smscore_start_device(struct smscore_device_t *coredev) in smscore_start_device() argument
881 int board_id = smscore_get_board_id(coredev); in smscore_start_device()
882 int mode = smscore_registry_getmode(coredev->devpath); in smscore_start_device()
888 rc = smscore_set_device_mode(coredev, mode); in smscore_start_device()
893 rc = smscore_configure_board(coredev); in smscore_start_device()
901 rc = smscore_notify_callbacks(coredev, coredev->device, 1); in smscore_start_device()
902 smscore_init_ir(coredev); in smscore_start_device()
904 pr_debug("device %p started, rc %d\n", coredev, rc); in smscore_start_device()
913 static int smscore_load_firmware_family2(struct smscore_device_t *coredev, in smscore_load_firmware_family2() argument
929 if (coredev->preload_handler) { in smscore_load_firmware_family2()
930 rc = coredev->preload_handler(coredev->context); in smscore_load_firmware_family2()
940 if (coredev->mode != DEVICE_MODE_NONE) { in smscore_load_firmware_family2()
944 rc = smscore_sendrequest_and_wait(coredev, msg, in smscore_load_firmware_family2()
946 &coredev->reload_start_done); in smscore_load_firmware_family2()
970 rc = smscore_sendrequest_and_wait(coredev, data_msg, in smscore_load_firmware_family2()
972 &coredev->data_download_done); in smscore_load_firmware_family2()
991 rc = smscore_sendrequest_and_wait(coredev, msg, in smscore_load_firmware_family2()
993 &coredev->data_validity_done); in smscore_load_firmware_family2()
997 if (coredev->mode == DEVICE_MODE_NONE) { in smscore_load_firmware_family2()
1014 rc = smscore_sendrequest_and_wait(coredev, trigger_msg, in smscore_load_firmware_family2()
1016 &coredev->trigger_done); in smscore_load_firmware_family2()
1020 rc = coredev->sendrequest_handler(coredev->context, msg, in smscore_load_firmware_family2()
1036 if (coredev->postload_handler) { in smscore_load_firmware_family2()
1038 rc, coredev->postload_handler); in smscore_load_firmware_family2()
1040 return coredev->postload_handler(coredev->context); in smscore_load_firmware_family2()
1107 static char *smscore_get_fw_filename(struct smscore_device_t *coredev, in smscore_get_fw_filename() argument
1111 int board_id = smscore_get_board_id(coredev); in smscore_get_fw_filename()
1114 type = smscore_registry_gettype(coredev->devpath); in smscore_get_fw_filename()
1144 static int smscore_load_firmware_from_file(struct smscore_device_t *coredev, in smscore_load_firmware_from_file() argument
1153 char *fw_filename = smscore_get_fw_filename(coredev, mode); in smscore_load_firmware_from_file()
1160 if (loadfirmware_handler == NULL && !(coredev->device_flags in smscore_load_firmware_from_file()
1164 rc = request_firmware(&fw, fw_filename, coredev->device); in smscore_load_firmware_from_file()
1179 rc = (coredev->device_flags & SMS_DEVICE_FAMILY2) ? in smscore_load_firmware_from_file()
1180 smscore_load_firmware_family2(coredev, fw_buf, fw_buf_size) in smscore_load_firmware_from_file()
1181 : loadfirmware_handler(coredev->context, fw_buf, in smscore_load_firmware_from_file()
1200 void smscore_unregister_device(struct smscore_device_t *coredev) in smscore_unregister_device() argument
1209 sms_ir_exit(coredev); in smscore_unregister_device()
1211 smscore_notify_clients(coredev); in smscore_unregister_device()
1212 smscore_notify_callbacks(coredev, NULL, 0); in smscore_unregister_device()
1218 while (!list_empty(&coredev->buffers)) { in smscore_unregister_device()
1219 cb = (struct smscore_buffer_t *) coredev->buffers.next; in smscore_unregister_device()
1224 if (num_buffers == coredev->num_buffers) in smscore_unregister_device()
1232 coredev->num_buffers - num_buffers); in smscore_unregister_device()
1240 if (coredev->common_buffer) in smscore_unregister_device()
1241 dma_free_coherent(NULL, coredev->common_buffer_size, in smscore_unregister_device()
1242 coredev->common_buffer, coredev->common_buffer_phys); in smscore_unregister_device()
1244 kfree(coredev->fw_buf); in smscore_unregister_device()
1246 list_del(&coredev->entry); in smscore_unregister_device()
1247 kfree(coredev); in smscore_unregister_device()
1251 pr_debug("device %p destroyed\n", coredev); in smscore_unregister_device()
1255 static int smscore_detect_mode(struct smscore_device_t *coredev) in smscore_detect_mode() argument
1269 rc = smscore_sendrequest_and_wait(coredev, msg, msg->msg_length, in smscore_detect_mode()
1270 &coredev->version_ex_done); in smscore_detect_mode()
1274 if (wait_for_completion_timeout(&coredev->resume_done, in smscore_detect_mode()
1277 coredev, msg, msg->msg_length, in smscore_detect_mode()
1278 &coredev->version_ex_done); in smscore_detect_mode()
1300 static int smscore_init_device(struct smscore_device_t *coredev, int mode) in smscore_init_device() argument
1318 rc = smscore_sendrequest_and_wait(coredev, msg, in smscore_init_device()
1320 &coredev->init_device_done); in smscore_init_device()
1336 int smscore_set_device_mode(struct smscore_device_t *coredev, int mode) in smscore_set_device_mode() argument
1341 if (coredev->device_flags & SMS_DEVICE_FAMILY2) { in smscore_set_device_mode()
1347 smscore_registry_setmode(coredev->devpath, mode); in smscore_set_device_mode()
1349 if (!(coredev->device_flags & SMS_DEVICE_NOT_READY)) { in smscore_set_device_mode()
1350 rc = smscore_detect_mode(coredev); in smscore_set_device_mode()
1357 if (coredev->mode == mode) { in smscore_set_device_mode()
1362 if (!(coredev->modes_supported & (1 << mode))) { in smscore_set_device_mode()
1363 rc = smscore_load_firmware_from_file(coredev, in smscore_set_device_mode()
1371 if (coredev->fw_version >= 0x800) { in smscore_set_device_mode()
1372 rc = smscore_init_device(coredev, mode); in smscore_set_device_mode()
1382 smscore_registry_setmode(coredev->devpath, mode); in smscore_set_device_mode()
1384 if (coredev->detectmode_handler) in smscore_set_device_mode()
1385 coredev->detectmode_handler(coredev->context, in smscore_set_device_mode()
1386 &coredev->mode); in smscore_set_device_mode()
1388 if (coredev->mode != mode && coredev->setmode_handler) in smscore_set_device_mode()
1389 rc = coredev->setmode_handler(coredev->context, mode); in smscore_set_device_mode()
1394 coredev->mode = mode; in smscore_set_device_mode()
1395 coredev->device_flags &= ~SMS_DEVICE_NOT_READY; in smscore_set_device_mode()
1407 coredev, msg, msg->x_msg_header.msg_length, in smscore_set_device_mode()
1408 &coredev->init_device_done); in smscore_set_device_mode()
1430 int smscore_get_device_mode(struct smscore_device_t *coredev) in smscore_get_device_mode() argument
1432 return coredev->mode; in smscore_get_device_mode()
1447 smscore_client_t *smscore_find_client(struct smscore_device_t *coredev, in smscore_find_client() argument
1456 spin_lock_irqsave(&coredev->clientslock, flags); in smscore_find_client()
1457 first = &coredev->clients; in smscore_find_client()
1469 spin_unlock_irqrestore(&coredev->clientslock, flags); in smscore_find_client()
1482 void smscore_onresponse(struct smscore_device_t *coredev, in smscore_onresponse() argument
1508 if (coredev->mode == DEVICE_MODE_DVBT_BDA) in smscore_onresponse()
1513 client = smscore_find_client(coredev, phdr->msg_type, phdr->msg_dst_id); in smscore_onresponse()
1544 coredev->mode = ver->firmware_id == 255 ? in smscore_onresponse()
1546 coredev->modes_supported = ver->supported_protocols; in smscore_onresponse()
1547 coredev->fw_version = ver->rom_ver_major << 8 | in smscore_onresponse()
1550 complete(&coredev->version_ex_done); in smscore_onresponse()
1554 complete(&coredev->init_device_done); in smscore_onresponse()
1557 complete(&coredev->reload_start_done); in smscore_onresponse()
1565 complete(&coredev->data_validity_done); in smscore_onresponse()
1569 complete(&coredev->data_download_done); in smscore_onresponse()
1574 complete(&coredev->trigger_done); in smscore_onresponse()
1577 complete(&coredev->resume_done); in smscore_onresponse()
1580 complete(&coredev->gpio_configuration_done); in smscore_onresponse()
1583 complete(&coredev->gpio_set_level_done); in smscore_onresponse()
1588 coredev->gpio_get_res = msgdata[1]; in smscore_onresponse()
1590 coredev->gpio_get_res); in smscore_onresponse()
1591 complete(&coredev->gpio_get_level_done); in smscore_onresponse()
1595 complete(&coredev->ir_init_done); in smscore_onresponse()
1598 sms_ir_event(coredev, in smscore_onresponse()
1621 smscore_putbuffer(coredev, cb); in smscore_onresponse()
1635 static struct smscore_buffer_t *get_entry(struct smscore_device_t *coredev) in get_entry() argument
1640 spin_lock_irqsave(&coredev->bufferslock, flags); in get_entry()
1641 if (!list_empty(&coredev->buffers)) { in get_entry()
1642 cb = (struct smscore_buffer_t *) coredev->buffers.next; in get_entry()
1645 spin_unlock_irqrestore(&coredev->bufferslock, flags); in get_entry()
1649 struct smscore_buffer_t *smscore_getbuffer(struct smscore_device_t *coredev) in smscore_getbuffer() argument
1653 wait_event(coredev->buffer_mng_waitq, (cb = get_entry(coredev))); in smscore_getbuffer()
1667 void smscore_putbuffer(struct smscore_device_t *coredev, in smscore_putbuffer() argument
1669 wake_up_interruptible(&coredev->buffer_mng_waitq); in smscore_putbuffer()
1670 list_add_locked(&cb->entry, &coredev->buffers, &coredev->bufferslock); in smscore_putbuffer()
1674 static int smscore_validate_client(struct smscore_device_t *coredev, in smscore_validate_client() argument
1685 registered_client = smscore_find_client(coredev, data_type, id); in smscore_validate_client()
1701 &coredev->clientslock); in smscore_validate_client()
1719 int smscore_register_client(struct smscore_device_t *coredev, in smscore_register_client() argument
1725 if (smscore_find_client(coredev, params->data_type, in smscore_register_client()
1738 newclient->coredev = coredev; in smscore_register_client()
1742 list_add_locked(&newclient->entry, &coredev->clients, in smscore_register_client()
1743 &coredev->clientslock); in smscore_register_client()
1744 smscore_validate_client(coredev, newclient, params->data_type, in smscore_register_client()
1763 struct smscore_device_t *coredev = client->coredev; in smscore_unregister_client() local
1766 spin_lock_irqsave(&coredev->clientslock, flags); in smscore_unregister_client()
1781 spin_unlock_irqrestore(&coredev->clientslock, flags); in smscore_unregister_client()
1799 struct smscore_device_t *coredev; in smsclient_sendrequest() local
1808 coredev = client->coredev; in smsclient_sendrequest()
1811 if (coredev == NULL) { in smsclient_sendrequest()
1816 rc = smscore_validate_client(client->coredev, client, 0, in smsclient_sendrequest()
1821 return coredev->sendrequest_handler(coredev->context, buffer, size); in smsclient_sendrequest()
1827 int smscore_configure_gpio(struct smscore_device_t *coredev, u32 pin, in smscore_configure_gpio() argument
1835 if (coredev->device_flags & SMS_DEVICE_FAMILY2) { in smscore_configure_gpio()
1869 return coredev->sendrequest_handler(coredev->context, in smscore_configure_gpio()
1873 int smscore_set_gpio(struct smscore_device_t *coredev, u32 pin, int level) in smscore_set_gpio() argument
1893 return coredev->sendrequest_handler(coredev->context, in smscore_set_gpio()
1948 int smscore_gpio_configure(struct smscore_device_t *coredev, u8 pin_num, in smscore_gpio_configure() argument
1986 if (!(coredev->device_flags & SMS_DEVICE_FAMILY2)) { in smscore_gpio_configure()
2012 rc = smscore_sendrequest_and_wait(coredev, p_msg, total_len, in smscore_gpio_configure()
2013 &coredev->gpio_configuration_done); in smscore_gpio_configure()
2027 int smscore_gpio_set_level(struct smscore_device_t *coredev, u8 pin_num, in smscore_gpio_set_level() argument
2061 rc = smscore_sendrequest_and_wait(coredev, p_msg, total_len, in smscore_gpio_set_level()
2062 &coredev->gpio_set_level_done); in smscore_gpio_set_level()
2075 int smscore_gpio_get_level(struct smscore_device_t *coredev, u8 pin_num, in smscore_gpio_get_level() argument
2109 rc = smscore_sendrequest_and_wait(coredev, p_msg, total_len, in smscore_gpio_get_level()
2110 &coredev->gpio_get_level_done); in smscore_gpio_get_level()
2123 *level = coredev->gpio_get_res; in smscore_gpio_get_level()