fintek 26 drivers/media/rc/fintek-cir.c static inline void fintek_cr_write(struct fintek_dev *fintek, u8 val, u8 reg) fintek 29 drivers/media/rc/fintek-cir.c __func__, reg, val, fintek->cr_ip, fintek->cr_dp); fintek 30 drivers/media/rc/fintek-cir.c outb(reg, fintek->cr_ip); fintek 31 drivers/media/rc/fintek-cir.c outb(val, fintek->cr_dp); fintek 35 drivers/media/rc/fintek-cir.c static inline u8 fintek_cr_read(struct fintek_dev *fintek, u8 reg) fintek 39 drivers/media/rc/fintek-cir.c outb(reg, fintek->cr_ip); fintek 40 drivers/media/rc/fintek-cir.c val = inb(fintek->cr_dp); fintek 43 drivers/media/rc/fintek-cir.c __func__, reg, val, fintek->cr_ip, fintek->cr_dp); fintek 48 drivers/media/rc/fintek-cir.c static inline void fintek_set_reg_bit(struct fintek_dev *fintek, u8 val, u8 reg) fintek 50 drivers/media/rc/fintek-cir.c u8 tmp = fintek_cr_read(fintek, reg) | val; fintek 51 drivers/media/rc/fintek-cir.c fintek_cr_write(fintek, tmp, reg); fintek 55 drivers/media/rc/fintek-cir.c static inline void fintek_clear_reg_bit(struct fintek_dev *fintek, u8 val, u8 reg) fintek 57 drivers/media/rc/fintek-cir.c u8 tmp = fintek_cr_read(fintek, reg) & ~val; fintek 58 drivers/media/rc/fintek-cir.c fintek_cr_write(fintek, tmp, reg); fintek 62 drivers/media/rc/fintek-cir.c static inline void fintek_config_mode_enable(struct fintek_dev *fintek) fintek 65 drivers/media/rc/fintek-cir.c outb(CONFIG_REG_ENABLE, fintek->cr_ip); fintek 66 drivers/media/rc/fintek-cir.c outb(CONFIG_REG_ENABLE, fintek->cr_ip); fintek 70 drivers/media/rc/fintek-cir.c static inline void fintek_config_mode_disable(struct fintek_dev *fintek) fintek 72 drivers/media/rc/fintek-cir.c outb(CONFIG_REG_DISABLE, fintek->cr_ip); fintek 79 drivers/media/rc/fintek-cir.c static inline void fintek_select_logical_dev(struct fintek_dev *fintek, u8 ldev) fintek 81 drivers/media/rc/fintek-cir.c fintek_cr_write(fintek, ldev, GCR_LOGICAL_DEV_NO); fintek 85 drivers/media/rc/fintek-cir.c static inline void fintek_cir_reg_write(struct fintek_dev *fintek, u8 val, u8 offset) fintek 87 drivers/media/rc/fintek-cir.c outb(val, fintek->cir_addr + offset); fintek 91 drivers/media/rc/fintek-cir.c static u8 fintek_cir_reg_read(struct fintek_dev *fintek, u8 offset) fintek 93 drivers/media/rc/fintek-cir.c return inb(fintek->cir_addr + offset); fintek 97 drivers/media/rc/fintek-cir.c static void cir_dump_regs(struct fintek_dev *fintek) fintek 99 drivers/media/rc/fintek-cir.c fintek_config_mode_enable(fintek); fintek 100 drivers/media/rc/fintek-cir.c fintek_select_logical_dev(fintek, fintek->logical_dev_cir); fintek 104 drivers/media/rc/fintek-cir.c (fintek_cr_read(fintek, CIR_CR_BASE_ADDR_HI) << 8) | fintek 105 drivers/media/rc/fintek-cir.c fintek_cr_read(fintek, CIR_CR_BASE_ADDR_LO)); fintek 107 drivers/media/rc/fintek-cir.c fintek_cr_read(fintek, CIR_CR_IRQ_SEL)); fintek 109 drivers/media/rc/fintek-cir.c fintek_config_mode_disable(fintek); fintek 113 drivers/media/rc/fintek-cir.c fintek_cir_reg_read(fintek, CIR_STATUS)); fintek 115 drivers/media/rc/fintek-cir.c fintek_cir_reg_read(fintek, CIR_CONTROL)); fintek 117 drivers/media/rc/fintek-cir.c fintek_cir_reg_read(fintek, CIR_RX_DATA)); fintek 119 drivers/media/rc/fintek-cir.c fintek_cir_reg_read(fintek, CIR_TX_CONTROL)); fintek 121 drivers/media/rc/fintek-cir.c fintek_cir_reg_read(fintek, CIR_TX_DATA)); fintek 125 drivers/media/rc/fintek-cir.c static int fintek_hw_detect(struct fintek_dev *fintek) fintek 133 drivers/media/rc/fintek-cir.c fintek_config_mode_enable(fintek); fintek 136 drivers/media/rc/fintek-cir.c portsel = fintek_cr_read(fintek, GCR_CONFIG_PORT_SEL); fintek 139 drivers/media/rc/fintek-cir.c fintek_config_mode_disable(fintek); fintek 140 drivers/media/rc/fintek-cir.c fintek->cr_ip = CR_INDEX_PORT2; fintek 141 drivers/media/rc/fintek-cir.c fintek->cr_dp = CR_DATA_PORT2; fintek 142 drivers/media/rc/fintek-cir.c fintek_config_mode_enable(fintek); fintek 143 drivers/media/rc/fintek-cir.c portsel = fintek_cr_read(fintek, GCR_CONFIG_PORT_SEL); fintek 147 drivers/media/rc/fintek-cir.c ir_class = fintek_cir_reg_read(fintek, CIR_CR_CLASS); fintek 153 drivers/media/rc/fintek-cir.c fintek->hw_tx_capable = true; fintek 157 drivers/media/rc/fintek-cir.c fintek->hw_tx_capable = false; fintek 161 drivers/media/rc/fintek-cir.c chip_major = fintek_cr_read(fintek, GCR_CHIP_ID_HI); fintek 162 drivers/media/rc/fintek-cir.c chip_minor = fintek_cr_read(fintek, GCR_CHIP_ID_LO); fintek 165 drivers/media/rc/fintek-cir.c vendor_major = fintek_cr_read(fintek, GCR_VENDOR_ID_HI); fintek 166 drivers/media/rc/fintek-cir.c vendor_minor = fintek_cr_read(fintek, GCR_VENDOR_ID_LO); fintek 174 drivers/media/rc/fintek-cir.c fintek_config_mode_disable(fintek); fintek 176 drivers/media/rc/fintek-cir.c spin_lock_irqsave(&fintek->fintek_lock, flags); fintek 177 drivers/media/rc/fintek-cir.c fintek->chip_major = chip_major; fintek 178 drivers/media/rc/fintek-cir.c fintek->chip_minor = chip_minor; fintek 179 drivers/media/rc/fintek-cir.c fintek->chip_vendor = vendor; fintek 185 drivers/media/rc/fintek-cir.c fintek->logical_dev_cir = LOGICAL_DEV_CIR_REV2; fintek 187 drivers/media/rc/fintek-cir.c fintek->logical_dev_cir = LOGICAL_DEV_CIR_REV1; fintek 189 drivers/media/rc/fintek-cir.c spin_unlock_irqrestore(&fintek->fintek_lock, flags); fintek 194 drivers/media/rc/fintek-cir.c static void fintek_cir_ldev_init(struct fintek_dev *fintek) fintek 197 drivers/media/rc/fintek-cir.c fintek_select_logical_dev(fintek, fintek->logical_dev_cir); fintek 198 drivers/media/rc/fintek-cir.c fintek_cr_write(fintek, LOGICAL_DEV_ENABLE, CIR_CR_DEV_EN); fintek 201 drivers/media/rc/fintek-cir.c fintek_cr_write(fintek, fintek->cir_addr >> 8, CIR_CR_BASE_ADDR_HI); fintek 202 drivers/media/rc/fintek-cir.c fintek_cr_write(fintek, fintek->cir_addr & 0xff, CIR_CR_BASE_ADDR_LO); fintek 204 drivers/media/rc/fintek-cir.c fintek_cr_write(fintek, fintek->cir_irq, CIR_CR_IRQ_SEL); fintek 207 drivers/media/rc/fintek-cir.c fintek->cir_addr, fintek->cir_irq, fintek->cir_port_len); fintek 211 drivers/media/rc/fintek-cir.c static void fintek_enable_cir_irq(struct fintek_dev *fintek) fintek 213 drivers/media/rc/fintek-cir.c fintek_cir_reg_write(fintek, CIR_STATUS_IRQ_EN, CIR_STATUS); fintek 216 drivers/media/rc/fintek-cir.c static void fintek_cir_regs_init(struct fintek_dev *fintek) fintek 219 drivers/media/rc/fintek-cir.c fintek_cir_reg_write(fintek, CIR_STATUS_IRQ_MASK, CIR_STATUS); fintek 222 drivers/media/rc/fintek-cir.c fintek_enable_cir_irq(fintek); fintek 225 drivers/media/rc/fintek-cir.c static void fintek_enable_wake(struct fintek_dev *fintek) fintek 227 drivers/media/rc/fintek-cir.c fintek_config_mode_enable(fintek); fintek 228 drivers/media/rc/fintek-cir.c fintek_select_logical_dev(fintek, LOGICAL_DEV_ACPI); fintek 231 drivers/media/rc/fintek-cir.c fintek_set_reg_bit(fintek, ACPI_WAKE_EN_CIR_BIT, LDEV_ACPI_WAKE_EN_REG); fintek 233 drivers/media/rc/fintek-cir.c fintek_set_reg_bit(fintek, ACPI_PME_CIR_BIT, LDEV_ACPI_PME_EN_REG); fintek 235 drivers/media/rc/fintek-cir.c fintek_set_reg_bit(fintek, ACPI_PME_CIR_BIT, LDEV_ACPI_PME_CLR_REG); fintek 237 drivers/media/rc/fintek-cir.c fintek_set_reg_bit(fintek, ACPI_STATE_CIR_BIT, LDEV_ACPI_STATE_REG); fintek 239 drivers/media/rc/fintek-cir.c fintek_config_mode_disable(fintek); fintek 274 drivers/media/rc/fintek-cir.c static void fintek_process_rx_ir_data(struct fintek_dev *fintek) fintek 281 drivers/media/rc/fintek-cir.c for (i = 0; i < fintek->pkts; i++) { fintek 282 drivers/media/rc/fintek-cir.c sample = fintek->buf[i]; fintek 283 drivers/media/rc/fintek-cir.c switch (fintek->parser_state) { fintek 285 drivers/media/rc/fintek-cir.c fintek->cmd = sample; fintek 286 drivers/media/rc/fintek-cir.c if ((fintek->cmd == BUF_COMMAND_HEADER) || fintek 287 drivers/media/rc/fintek-cir.c ((fintek->cmd & BUF_COMMAND_MASK) != fintek 289 drivers/media/rc/fintek-cir.c fintek->parser_state = SUBCMD; fintek 292 drivers/media/rc/fintek-cir.c fintek->rem = (fintek->cmd & BUF_LEN_MASK); fintek 293 drivers/media/rc/fintek-cir.c fit_dbg("%s: rem: 0x%02x", __func__, fintek->rem); fintek 294 drivers/media/rc/fintek-cir.c if (fintek->rem) fintek 295 drivers/media/rc/fintek-cir.c fintek->parser_state = PARSE_IRDATA; fintek 297 drivers/media/rc/fintek-cir.c ir_raw_event_reset(fintek->rdev); fintek 300 drivers/media/rc/fintek-cir.c fintek->rem = fintek_cmdsize(fintek->cmd, sample); fintek 301 drivers/media/rc/fintek-cir.c fintek->parser_state = CMD_DATA; fintek 304 drivers/media/rc/fintek-cir.c fintek->rem--; fintek 307 drivers/media/rc/fintek-cir.c fintek->rem--; fintek 315 drivers/media/rc/fintek-cir.c if (ir_raw_event_store_with_filter(fintek->rdev, fintek 321 drivers/media/rc/fintek-cir.c if ((fintek->parser_state != CMD_HEADER) && !fintek->rem) fintek 322 drivers/media/rc/fintek-cir.c fintek->parser_state = CMD_HEADER; fintek 325 drivers/media/rc/fintek-cir.c fintek->pkts = 0; fintek 329 drivers/media/rc/fintek-cir.c ir_raw_event_handle(fintek->rdev); fintek 334 drivers/media/rc/fintek-cir.c static void fintek_get_rx_ir_data(struct fintek_dev *fintek, u8 rx_irqs) fintek 339 drivers/media/rc/fintek-cir.c spin_lock_irqsave(&fintek->fintek_lock, flags); fintek 347 drivers/media/rc/fintek-cir.c sample = fintek_cir_reg_read(fintek, CIR_RX_DATA); fintek 350 drivers/media/rc/fintek-cir.c fintek->buf[fintek->pkts] = sample; fintek 351 drivers/media/rc/fintek-cir.c fintek->pkts++; fintek 353 drivers/media/rc/fintek-cir.c status = fintek_cir_reg_read(fintek, CIR_STATUS); fintek 358 drivers/media/rc/fintek-cir.c fintek_process_rx_ir_data(fintek); fintek 360 drivers/media/rc/fintek-cir.c spin_unlock_irqrestore(&fintek->fintek_lock, flags); fintek 376 drivers/media/rc/fintek-cir.c struct fintek_dev *fintek = data; fintek 381 drivers/media/rc/fintek-cir.c fintek_config_mode_enable(fintek); fintek 382 drivers/media/rc/fintek-cir.c fintek_select_logical_dev(fintek, fintek->logical_dev_cir); fintek 383 drivers/media/rc/fintek-cir.c fintek_config_mode_disable(fintek); fintek 394 drivers/media/rc/fintek-cir.c status = fintek_cir_reg_read(fintek, CIR_STATUS); fintek 397 drivers/media/rc/fintek-cir.c fintek_cir_reg_write(fintek, CIR_STATUS_IRQ_MASK, CIR_STATUS); fintek 406 drivers/media/rc/fintek-cir.c fintek_get_rx_ir_data(fintek, rx_irqs); fintek 409 drivers/media/rc/fintek-cir.c fintek_cir_reg_write(fintek, status, CIR_STATUS); fintek 415 drivers/media/rc/fintek-cir.c static void fintek_enable_cir(struct fintek_dev *fintek) fintek 418 drivers/media/rc/fintek-cir.c fintek_cir_reg_write(fintek, CIR_STATUS_IRQ_EN, CIR_STATUS); fintek 420 drivers/media/rc/fintek-cir.c fintek_config_mode_enable(fintek); fintek 423 drivers/media/rc/fintek-cir.c fintek_select_logical_dev(fintek, fintek->logical_dev_cir); fintek 424 drivers/media/rc/fintek-cir.c fintek_cr_write(fintek, LOGICAL_DEV_ENABLE, CIR_CR_DEV_EN); fintek 426 drivers/media/rc/fintek-cir.c fintek_config_mode_disable(fintek); fintek 429 drivers/media/rc/fintek-cir.c fintek_cir_reg_write(fintek, CIR_STATUS_IRQ_MASK, CIR_STATUS); fintek 432 drivers/media/rc/fintek-cir.c fintek_enable_cir_irq(fintek); fintek 435 drivers/media/rc/fintek-cir.c static void fintek_disable_cir(struct fintek_dev *fintek) fintek 437 drivers/media/rc/fintek-cir.c fintek_config_mode_enable(fintek); fintek 440 drivers/media/rc/fintek-cir.c fintek_select_logical_dev(fintek, fintek->logical_dev_cir); fintek 441 drivers/media/rc/fintek-cir.c fintek_cr_write(fintek, LOGICAL_DEV_DISABLE, CIR_CR_DEV_EN); fintek 443 drivers/media/rc/fintek-cir.c fintek_config_mode_disable(fintek); fintek 448 drivers/media/rc/fintek-cir.c struct fintek_dev *fintek = dev->priv; fintek 451 drivers/media/rc/fintek-cir.c spin_lock_irqsave(&fintek->fintek_lock, flags); fintek 452 drivers/media/rc/fintek-cir.c fintek_enable_cir(fintek); fintek 453 drivers/media/rc/fintek-cir.c spin_unlock_irqrestore(&fintek->fintek_lock, flags); fintek 460 drivers/media/rc/fintek-cir.c struct fintek_dev *fintek = dev->priv; fintek 463 drivers/media/rc/fintek-cir.c spin_lock_irqsave(&fintek->fintek_lock, flags); fintek 464 drivers/media/rc/fintek-cir.c fintek_disable_cir(fintek); fintek 465 drivers/media/rc/fintek-cir.c spin_unlock_irqrestore(&fintek->fintek_lock, flags); fintek 471 drivers/media/rc/fintek-cir.c struct fintek_dev *fintek; fintek 475 drivers/media/rc/fintek-cir.c fintek = kzalloc(sizeof(struct fintek_dev), GFP_KERNEL); fintek 476 drivers/media/rc/fintek-cir.c if (!fintek) fintek 496 drivers/media/rc/fintek-cir.c fintek->cir_addr = pnp_port_start(pdev, 0); fintek 497 drivers/media/rc/fintek-cir.c fintek->cir_irq = pnp_irq(pdev, 0); fintek 498 drivers/media/rc/fintek-cir.c fintek->cir_port_len = pnp_port_len(pdev, 0); fintek 500 drivers/media/rc/fintek-cir.c fintek->cr_ip = CR_INDEX_PORT; fintek 501 drivers/media/rc/fintek-cir.c fintek->cr_dp = CR_DATA_PORT; fintek 503 drivers/media/rc/fintek-cir.c spin_lock_init(&fintek->fintek_lock); fintek 505 drivers/media/rc/fintek-cir.c pnp_set_drvdata(pdev, fintek); fintek 506 drivers/media/rc/fintek-cir.c fintek->pdev = pdev; fintek 508 drivers/media/rc/fintek-cir.c ret = fintek_hw_detect(fintek); fintek 513 drivers/media/rc/fintek-cir.c fintek_config_mode_enable(fintek); fintek 514 drivers/media/rc/fintek-cir.c fintek_cir_ldev_init(fintek); fintek 515 drivers/media/rc/fintek-cir.c fintek_config_mode_disable(fintek); fintek 518 drivers/media/rc/fintek-cir.c fintek_cir_regs_init(fintek); fintek 521 drivers/media/rc/fintek-cir.c rdev->priv = fintek; fintek 529 drivers/media/rc/fintek-cir.c rdev->input_id.product = fintek->chip_major; fintek 530 drivers/media/rc/fintek-cir.c rdev->input_id.version = fintek->chip_minor; fintek 538 drivers/media/rc/fintek-cir.c fintek->rdev = rdev; fintek 542 drivers/media/rc/fintek-cir.c if (!request_region(fintek->cir_addr, fintek 543 drivers/media/rc/fintek-cir.c fintek->cir_port_len, FINTEK_DRIVER_NAME)) fintek 546 drivers/media/rc/fintek-cir.c if (request_irq(fintek->cir_irq, fintek_cir_isr, IRQF_SHARED, fintek 547 drivers/media/rc/fintek-cir.c FINTEK_DRIVER_NAME, (void *)fintek)) fintek 558 drivers/media/rc/fintek-cir.c cir_dump_regs(fintek); fintek 563 drivers/media/rc/fintek-cir.c free_irq(fintek->cir_irq, fintek); fintek 565 drivers/media/rc/fintek-cir.c release_region(fintek->cir_addr, fintek->cir_port_len); fintek 568 drivers/media/rc/fintek-cir.c kfree(fintek); fintek 575 drivers/media/rc/fintek-cir.c struct fintek_dev *fintek = pnp_get_drvdata(pdev); fintek 578 drivers/media/rc/fintek-cir.c spin_lock_irqsave(&fintek->fintek_lock, flags); fintek 580 drivers/media/rc/fintek-cir.c fintek_disable_cir(fintek); fintek 581 drivers/media/rc/fintek-cir.c fintek_cir_reg_write(fintek, CIR_STATUS_IRQ_MASK, CIR_STATUS); fintek 583 drivers/media/rc/fintek-cir.c fintek_enable_wake(fintek); fintek 584 drivers/media/rc/fintek-cir.c spin_unlock_irqrestore(&fintek->fintek_lock, flags); fintek 587 drivers/media/rc/fintek-cir.c free_irq(fintek->cir_irq, fintek); fintek 588 drivers/media/rc/fintek-cir.c release_region(fintek->cir_addr, fintek->cir_port_len); fintek 590 drivers/media/rc/fintek-cir.c rc_unregister_device(fintek->rdev); fintek 592 drivers/media/rc/fintek-cir.c kfree(fintek); fintek 597 drivers/media/rc/fintek-cir.c struct fintek_dev *fintek = pnp_get_drvdata(pdev); fintek 602 drivers/media/rc/fintek-cir.c spin_lock_irqsave(&fintek->fintek_lock, flags); fintek 605 drivers/media/rc/fintek-cir.c fintek_cir_reg_write(fintek, CIR_STATUS_IRQ_MASK, CIR_STATUS); fintek 607 drivers/media/rc/fintek-cir.c spin_unlock_irqrestore(&fintek->fintek_lock, flags); fintek 609 drivers/media/rc/fintek-cir.c fintek_config_mode_enable(fintek); fintek 612 drivers/media/rc/fintek-cir.c fintek_select_logical_dev(fintek, fintek->logical_dev_cir); fintek 613 drivers/media/rc/fintek-cir.c fintek_cr_write(fintek, LOGICAL_DEV_DISABLE, CIR_CR_DEV_EN); fintek 615 drivers/media/rc/fintek-cir.c fintek_config_mode_disable(fintek); fintek 618 drivers/media/rc/fintek-cir.c fintek_enable_wake(fintek); fintek 625 drivers/media/rc/fintek-cir.c struct fintek_dev *fintek = pnp_get_drvdata(pdev); fintek 630 drivers/media/rc/fintek-cir.c fintek_enable_cir_irq(fintek); fintek 633 drivers/media/rc/fintek-cir.c fintek_config_mode_enable(fintek); fintek 634 drivers/media/rc/fintek-cir.c fintek_select_logical_dev(fintek, fintek->logical_dev_cir); fintek 635 drivers/media/rc/fintek-cir.c fintek_cr_write(fintek, LOGICAL_DEV_ENABLE, CIR_CR_DEV_EN); fintek 637 drivers/media/rc/fintek-cir.c fintek_config_mode_disable(fintek); fintek 639 drivers/media/rc/fintek-cir.c fintek_cir_regs_init(fintek); fintek 646 drivers/media/rc/fintek-cir.c struct fintek_dev *fintek = pnp_get_drvdata(pdev); fintek 647 drivers/media/rc/fintek-cir.c fintek_enable_wake(fintek);