pulse8 139 drivers/media/usb/pulse8-cec/pulse8-cec.c struct pulse8 *pulse8 = pulse8 140 drivers/media/usb/pulse8-cec/pulse8-cec.c container_of(work, struct pulse8, work); pulse8 141 drivers/media/usb/pulse8-cec/pulse8-cec.c u8 result = pulse8->work_result; pulse8 143 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->work_result = 0; pulse8 146 drivers/media/usb/pulse8-cec/pulse8-cec.c cec_received_msg(pulse8->adap, &pulse8->rx_msg); pulse8 149 drivers/media/usb/pulse8-cec/pulse8-cec.c cec_transmit_attempt_done(pulse8->adap, CEC_TX_STATUS_OK); pulse8 152 drivers/media/usb/pulse8-cec/pulse8-cec.c cec_transmit_attempt_done(pulse8->adap, CEC_TX_STATUS_NACK); pulse8 157 drivers/media/usb/pulse8-cec/pulse8-cec.c cec_transmit_attempt_done(pulse8->adap, CEC_TX_STATUS_ERROR); pulse8 165 drivers/media/usb/pulse8-cec/pulse8-cec.c struct pulse8 *pulse8 = serio_get_drvdata(serio); pulse8 167 drivers/media/usb/pulse8-cec/pulse8-cec.c if (!pulse8->started && data != MSGSTART) pulse8 170 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->escape = true; pulse8 173 drivers/media/usb/pulse8-cec/pulse8-cec.c if (pulse8->escape) { pulse8 175 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->escape = false; pulse8 177 drivers/media/usb/pulse8-cec/pulse8-cec.c struct cec_msg *msg = &pulse8->rx_msg; pulse8 178 drivers/media/usb/pulse8-cec/pulse8-cec.c u8 msgcode = pulse8->buf[0]; pulse8 181 drivers/media/usb/pulse8-cec/pulse8-cec.c dev_info(pulse8->dev, "received: %*ph\n", pulse8 182 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->idx, pulse8->buf); pulse8 186 drivers/media/usb/pulse8-cec/pulse8-cec.c msg->msg[0] = pulse8->buf[1]; pulse8 191 drivers/media/usb/pulse8-cec/pulse8-cec.c msg->msg[msg->len++] = pulse8->buf[1]; pulse8 193 drivers/media/usb/pulse8-cec/pulse8-cec.c WARN_ON(pulse8->work_result); pulse8 194 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->work_result = msgcode; pulse8 195 drivers/media/usb/pulse8-cec/pulse8-cec.c schedule_work(&pulse8->work); pulse8 204 drivers/media/usb/pulse8-cec/pulse8-cec.c WARN_ON(pulse8->work_result); pulse8 205 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->work_result = msgcode; pulse8 206 drivers/media/usb/pulse8-cec/pulse8-cec.c schedule_work(&pulse8->work); pulse8 216 drivers/media/usb/pulse8-cec/pulse8-cec.c if (pulse8->idx == 0) pulse8 218 drivers/media/usb/pulse8-cec/pulse8-cec.c memcpy(pulse8->data, pulse8->buf, pulse8->idx); pulse8 219 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->len = pulse8->idx; pulse8 220 drivers/media/usb/pulse8-cec/pulse8-cec.c complete(&pulse8->cmd_done); pulse8 223 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->idx = 0; pulse8 224 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->started = false; pulse8 227 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->idx = 0; pulse8 228 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->started = true; pulse8 232 drivers/media/usb/pulse8-cec/pulse8-cec.c if (pulse8->idx >= DATA_SIZE) { pulse8 233 drivers/media/usb/pulse8-cec/pulse8-cec.c dev_dbg(pulse8->dev, pulse8 234 drivers/media/usb/pulse8-cec/pulse8-cec.c "throwing away %d bytes of garbage\n", pulse8->idx); pulse8 235 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->idx = 0; pulse8 237 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->buf[pulse8->idx++] = data; pulse8 243 drivers/media/usb/pulse8-cec/pulse8-cec.c struct pulse8 *pulse8 = serio_get_drvdata(serio); pulse8 245 drivers/media/usb/pulse8-cec/pulse8-cec.c cec_unregister_adapter(pulse8->adap); pulse8 246 drivers/media/usb/pulse8-cec/pulse8-cec.c cancel_delayed_work_sync(&pulse8->ping_eeprom_work); pulse8 250 drivers/media/usb/pulse8-cec/pulse8-cec.c kfree(pulse8); pulse8 275 drivers/media/usb/pulse8-cec/pulse8-cec.c static int pulse8_send_and_wait_once(struct pulse8 *pulse8, pulse8 282 drivers/media/usb/pulse8-cec/pulse8-cec.c init_completion(&pulse8->cmd_done); pulse8 284 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send(pulse8->serio, cmd, cmd_len); pulse8 288 drivers/media/usb/pulse8-cec/pulse8-cec.c if (!wait_for_completion_timeout(&pulse8->cmd_done, HZ)) pulse8 290 drivers/media/usb/pulse8-cec/pulse8-cec.c if ((pulse8->data[0] & 0x3f) == MSGCODE_COMMAND_REJECTED && pulse8 296 drivers/media/usb/pulse8-cec/pulse8-cec.c ((pulse8->data[0] & 0x3f) != response || pulse8->len < size + 1)) { pulse8 297 drivers/media/usb/pulse8-cec/pulse8-cec.c dev_info(pulse8->dev, "transmit: failed %02x\n", pulse8 298 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->data[0] & 0x3f); pulse8 304 drivers/media/usb/pulse8-cec/pulse8-cec.c static int pulse8_send_and_wait(struct pulse8 *pulse8, pulse8 310 drivers/media/usb/pulse8-cec/pulse8-cec.c mutex_lock(&pulse8->write_lock); pulse8 311 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait_once(pulse8, cmd, cmd_len, response, size); pulse8 316 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait_once(pulse8, cmd_sc, 2, pulse8 320 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait_once(pulse8, cmd, cmd_len, pulse8 325 drivers/media/usb/pulse8-cec/pulse8-cec.c mutex_unlock(&pulse8->write_lock); pulse8 329 drivers/media/usb/pulse8-cec/pulse8-cec.c static int pulse8_setup(struct pulse8 *pulse8, struct serio *serio, pulse8 332 drivers/media/usb/pulse8-cec/pulse8-cec.c u8 *data = pulse8->data + 1; pulse8 338 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->vers = 0; pulse8 341 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 2); pulse8 344 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->vers = (data[0] << 8) | data[1]; pulse8 345 drivers/media/usb/pulse8-cec/pulse8-cec.c dev_info(pulse8->dev, "Firmware version %04x\n", pulse8->vers); pulse8 346 drivers/media/usb/pulse8-cec/pulse8-cec.c if (pulse8->vers < 2) { pulse8 352 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 4); pulse8 357 drivers/media/usb/pulse8-cec/pulse8-cec.c dev_info(pulse8->dev, "Firmware build date %04ld.%02d.%02d %02d:%02d:%02d\n", pulse8 361 drivers/media/usb/pulse8-cec/pulse8-cec.c dev_dbg(pulse8->dev, "Persistent config:\n"); pulse8 363 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 1); pulse8 366 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->autonomous = data[0]; pulse8 367 drivers/media/usb/pulse8-cec/pulse8-cec.c dev_dbg(pulse8->dev, "Autonomous mode: %s", pulse8 371 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 1); pulse8 375 drivers/media/usb/pulse8-cec/pulse8-cec.c dev_dbg(pulse8->dev, "Primary device type: %d\n", data[0]); pulse8 408 drivers/media/usb/pulse8-cec/pulse8-cec.c dev_info(pulse8->dev, "Unknown Primary Device Type: %d\n", pulse8 414 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 2); pulse8 418 drivers/media/usb/pulse8-cec/pulse8-cec.c dev_dbg(pulse8->dev, "Logical address ACK mask: %x\n", pulse8 424 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 1); pulse8 428 drivers/media/usb/pulse8-cec/pulse8-cec.c dev_dbg(pulse8->dev, "Physical address: %x.%x.%x.%x\n", pulse8 432 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 1); pulse8 436 drivers/media/usb/pulse8-cec/pulse8-cec.c dev_dbg(pulse8->dev, "CEC version: %d\n", log_addrs->cec_version); pulse8 439 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 0); pulse8 443 drivers/media/usb/pulse8-cec/pulse8-cec.c dev_dbg(pulse8->dev, "OSD name: %s\n", log_addrs->osd_name); pulse8 448 drivers/media/usb/pulse8-cec/pulse8-cec.c static int pulse8_apply_persistent_config(struct pulse8 *pulse8, pulse8 454 drivers/media/usb/pulse8-cec/pulse8-cec.c err = cec_s_log_addrs(pulse8->adap, log_addrs, false); pulse8 458 drivers/media/usb/pulse8-cec/pulse8-cec.c cec_s_phys_addr(pulse8->adap, pa, false); pulse8 465 drivers/media/usb/pulse8-cec/pulse8-cec.c struct pulse8 *pulse8 = cec_get_drvdata(adap); pulse8 471 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 2, pulse8 478 drivers/media/usb/pulse8-cec/pulse8-cec.c struct pulse8 *pulse8 = cec_get_drvdata(adap); pulse8 484 drivers/media/usb/pulse8-cec/pulse8-cec.c mutex_lock(&pulse8->config_lock); pulse8 490 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 3, pulse8 492 drivers/media/usb/pulse8-cec/pulse8-cec.c if ((err && mask != 0) || pulse8->restoring_config) pulse8 497 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 2, pulse8 501 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->autonomous = cmd[1]; pulse8 507 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 2, pulse8 541 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 3, pulse8 548 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 2, pulse8 556 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 3, pulse8 563 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 2, pulse8 581 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 1 + osd_len, pulse8 588 drivers/media/usb/pulse8-cec/pulse8-cec.c if (pulse8->restoring_config) pulse8 589 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->restoring_config = false; pulse8 591 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->config_pending = true; pulse8 592 drivers/media/usb/pulse8-cec/pulse8-cec.c mutex_unlock(&pulse8->config_lock); pulse8 599 drivers/media/usb/pulse8-cec/pulse8-cec.c struct pulse8 *pulse8 = cec_get_drvdata(adap); pulse8 606 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 2, pulse8 611 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 2, pulse8 616 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 2, pulse8 622 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 2, pulse8 628 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_send_and_wait(pulse8, cmd, 2, pulse8 651 drivers/media/usb/pulse8-cec/pulse8-cec.c struct pulse8 *pulse8; pulse8 656 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8 = kzalloc(sizeof(*pulse8), GFP_KERNEL); pulse8 658 drivers/media/usb/pulse8-cec/pulse8-cec.c if (!pulse8) pulse8 661 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->serio = serio; pulse8 662 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->adap = cec_allocate_adapter(&pulse8_cec_adap_ops, pulse8, pulse8 664 drivers/media/usb/pulse8-cec/pulse8-cec.c err = PTR_ERR_OR_ZERO(pulse8->adap); pulse8 668 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->dev = &serio->dev; pulse8 669 drivers/media/usb/pulse8-cec/pulse8-cec.c serio_set_drvdata(serio, pulse8); pulse8 670 drivers/media/usb/pulse8-cec/pulse8-cec.c INIT_WORK(&pulse8->work, pulse8_irq_work_handler); pulse8 671 drivers/media/usb/pulse8-cec/pulse8-cec.c mutex_init(&pulse8->write_lock); pulse8 672 drivers/media/usb/pulse8-cec/pulse8-cec.c mutex_init(&pulse8->config_lock); pulse8 673 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->config_pending = false; pulse8 679 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_setup(pulse8, serio, &log_addrs, &pa); pulse8 683 drivers/media/usb/pulse8-cec/pulse8-cec.c err = cec_register_adapter(pulse8->adap, &serio->dev); pulse8 687 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->dev = &pulse8->adap->devnode.dev; pulse8 689 drivers/media/usb/pulse8-cec/pulse8-cec.c if (persistent_config && pulse8->autonomous) { pulse8 690 drivers/media/usb/pulse8-cec/pulse8-cec.c err = pulse8_apply_persistent_config(pulse8, &log_addrs, pa); pulse8 693 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->restoring_config = true; pulse8 696 drivers/media/usb/pulse8-cec/pulse8-cec.c INIT_DELAYED_WORK(&pulse8->ping_eeprom_work, pulse8 698 drivers/media/usb/pulse8-cec/pulse8-cec.c schedule_delayed_work(&pulse8->ping_eeprom_work, PING_PERIOD); pulse8 705 drivers/media/usb/pulse8-cec/pulse8-cec.c cec_delete_adapter(pulse8->adap); pulse8 708 drivers/media/usb/pulse8-cec/pulse8-cec.c kfree(pulse8); pulse8 714 drivers/media/usb/pulse8-cec/pulse8-cec.c struct pulse8 *pulse8 = pulse8 715 drivers/media/usb/pulse8-cec/pulse8-cec.c container_of(work, struct pulse8, ping_eeprom_work.work); pulse8 718 drivers/media/usb/pulse8-cec/pulse8-cec.c schedule_delayed_work(&pulse8->ping_eeprom_work, PING_PERIOD); pulse8 720 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8_send_and_wait(pulse8, &cmd, 1, pulse8 723 drivers/media/usb/pulse8-cec/pulse8-cec.c if (pulse8->vers < 2) pulse8 726 drivers/media/usb/pulse8-cec/pulse8-cec.c mutex_lock(&pulse8->config_lock); pulse8 727 drivers/media/usb/pulse8-cec/pulse8-cec.c if (pulse8->config_pending && persistent_config) { pulse8 728 drivers/media/usb/pulse8-cec/pulse8-cec.c dev_dbg(pulse8->dev, "writing pending config to EEPROM\n"); pulse8 730 drivers/media/usb/pulse8-cec/pulse8-cec.c if (pulse8_send_and_wait(pulse8, &cmd, 1, pulse8 732 drivers/media/usb/pulse8-cec/pulse8-cec.c dev_info(pulse8->dev, "failed to write pending config to EEPROM\n"); pulse8 734 drivers/media/usb/pulse8-cec/pulse8-cec.c pulse8->config_pending = false; pulse8 736 drivers/media/usb/pulse8-cec/pulse8-cec.c mutex_unlock(&pulse8->config_lock);