Lines Matching refs:hw
380 struct img_ir_priv_hw *hw = &priv->hw; in img_ir_write_timings() local
384 if (hw->flags & BIT(type)) in img_ir_write_timings()
385 ft = img_ir_free_timing_dynamic(regs->ft, &hw->filters[type]); in img_ir_write_timings()
421 struct img_ir_priv_hw *hw = &priv->hw; in _img_ir_set_filter() local
427 hw->filters[RC_FILTER_NORMAL] = *filter; in _img_ir_set_filter()
428 hw->flags |= IMG_IR_F_FILTER; in _img_ir_set_filter()
433 hw->flags &= ~IMG_IR_F_FILTER; in _img_ir_set_filter()
449 struct img_ir_priv_hw *hw = &priv->hw; in _img_ir_set_wake_filter() local
452 hw->filters[RC_FILTER_WAKEUP] = *filter; in _img_ir_set_wake_filter()
453 hw->flags |= IMG_IR_F_WAKE; in _img_ir_set_wake_filter()
456 hw->flags &= ~IMG_IR_F_WAKE; in _img_ir_set_wake_filter()
465 struct img_ir_priv_hw *hw = &priv->hw; in img_ir_set_filter() local
483 if (!hw->decoder || !hw->decoder->filter) { in img_ir_set_filter()
491 ret = hw->decoder->filter(sc_filter, &filter, hw->enabled_protocols); in img_ir_set_filter()
539 struct img_ir_priv_hw *hw = &priv->hw; in img_ir_set_decoder() local
540 struct rc_dev *rdev = hw->rdev; in img_ir_set_decoder()
548 hw->stopping = true; in img_ir_set_decoder()
555 del_timer_sync(&hw->end_timer); in img_ir_set_decoder()
556 del_timer_sync(&hw->suspend_timer); in img_ir_set_decoder()
559 hw->stopping = false; in img_ir_set_decoder()
579 hw->mode = IMG_IR_M_NORMAL; in img_ir_set_decoder()
590 hw->enabled_protocols = 0; in img_ir_set_decoder()
593 hw->decoder = decoder; in img_ir_set_decoder()
600 hw->enabled_protocols = proto; in img_ir_set_decoder()
603 img_ir_decoder_convert(decoder, &hw->reg_timings, hw->clk_hz); in img_ir_set_decoder()
604 img_ir_write_timings(priv, &hw->reg_timings.timings, RC_FILTER_NORMAL); in img_ir_set_decoder()
607 img_ir_write(priv, IMG_IR_CONTROL, hw->reg_timings.ctrl); in img_ir_set_decoder()
628 if (priv->hw.ct_quirks[ct] & IMG_IR_QUIRK_CODE_BROKEN) in img_ir_decoder_compatible()
657 struct img_ir_priv_hw *hw = &priv->hw; in img_ir_change_protocol() local
658 struct rc_dev *rdev = hw->rdev; in img_ir_change_protocol()
685 if (!hw->decoder || !hw->decoder->filter) in img_ir_change_protocol()
695 struct rc_dev *rdev = priv->hw.rdev; in img_ir_set_protocol()
731 struct img_ir_priv_hw *hw = &priv->hw; in img_ir_enable_wake() local
735 if (hw->flags & IMG_IR_F_WAKE) { in img_ir_enable_wake()
737 hw->suspend_irqen = img_ir_read(priv, IMG_IR_IRQ_ENABLE); in img_ir_enable_wake()
739 img_ir_write_filter(priv, &hw->filters[RC_FILTER_WAKEUP]); in img_ir_enable_wake()
740 img_ir_write_timings(priv, &hw->reg_timings.timings, in img_ir_enable_wake()
742 hw->mode = IMG_IR_M_WAKE; in img_ir_enable_wake()
758 struct img_ir_priv_hw *hw = &priv->hw; in img_ir_disable_wake() local
762 if (hw->flags & IMG_IR_F_WAKE) { in img_ir_disable_wake()
764 if (hw->flags & IMG_IR_F_FILTER) { in img_ir_disable_wake()
766 (hw->suspend_irqen & IMG_IR_IRQ_EDGE) | in img_ir_disable_wake()
769 &hw->filters[RC_FILTER_NORMAL]); in img_ir_disable_wake()
772 (hw->suspend_irqen & IMG_IR_IRQ_EDGE) | in img_ir_disable_wake()
777 img_ir_write_timings(priv, &hw->reg_timings.timings, in img_ir_disable_wake()
779 hw->mode = IMG_IR_M_NORMAL; in img_ir_disable_wake()
790 struct img_ir_priv_hw *hw = &priv->hw; in img_ir_begin_repeat() local
791 if (hw->mode == IMG_IR_M_NORMAL) { in img_ir_begin_repeat()
794 hw->mode = IMG_IR_M_REPEATING; in img_ir_begin_repeat()
795 img_ir_write_timings(priv, &hw->reg_timings.rtimings, in img_ir_begin_repeat()
797 img_ir_write(priv, IMG_IR_CONTROL, hw->reg_timings.ctrl); in img_ir_begin_repeat()
804 struct img_ir_priv_hw *hw = &priv->hw; in img_ir_end_repeat() local
805 if (hw->mode == IMG_IR_M_REPEATING) { in img_ir_end_repeat()
808 hw->mode = IMG_IR_M_NORMAL; in img_ir_end_repeat()
809 img_ir_write_timings(priv, &hw->reg_timings.timings, in img_ir_end_repeat()
811 img_ir_write(priv, IMG_IR_CONTROL, hw->reg_timings.ctrl); in img_ir_end_repeat()
818 struct img_ir_priv_hw *hw = &priv->hw; in img_ir_handle_data() local
819 const struct img_ir_decoder *dec = hw->decoder; in img_ir_handle_data()
827 ret = dec->scancode(len, raw, hw->enabled_protocols, &request); in img_ir_handle_data()
837 rc_keydown(hw->rdev, request.protocol, request.scancode, in img_ir_handle_data()
841 if (hw->mode == IMG_IR_M_REPEATING) { in img_ir_handle_data()
843 rc_repeat(hw->rdev); in img_ir_handle_data()
854 if (dec->repeat && !hw->stopping) { in img_ir_handle_data()
861 mod_timer(&hw->end_timer, in img_ir_handle_data()
890 if ((priv->hw.quirk_suspend_irq & IMG_IR_IRQ_EDGE) == in img_ir_suspend_timer()
893 priv->hw.quirk_suspend_irq); in img_ir_suspend_timer()
895 img_ir_write(priv, IMG_IR_CONTROL, priv->hw.reg_timings.ctrl); in img_ir_suspend_timer()
903 struct img_ir_priv_hw *hw = &priv->hw; in img_ir_change_frequency() local
909 if (hw->clk_hz == change->new_rate) in img_ir_change_frequency()
911 hw->clk_hz = change->new_rate; in img_ir_change_frequency()
913 if (hw->decoder) { in img_ir_change_frequency()
914 img_ir_decoder_convert(hw->decoder, &hw->reg_timings, in img_ir_change_frequency()
915 hw->clk_hz); in img_ir_change_frequency()
916 switch (hw->mode) { in img_ir_change_frequency()
918 img_ir_write_timings(priv, &hw->reg_timings.timings, in img_ir_change_frequency()
922 img_ir_write_timings(priv, &hw->reg_timings.rtimings, in img_ir_change_frequency()
927 img_ir_write_timings(priv, &hw->reg_timings.timings, in img_ir_change_frequency()
941 hw.clk_nb); in img_ir_clk_notify()
956 struct img_ir_priv_hw *hw = &priv->hw; in img_ir_isr_hw() local
961 if (!hw->decoder) in img_ir_isr_hw()
964 ct = hw->decoder->control.code_type; in img_ir_isr_hw()
968 if (!(priv->hw.ct_quirks[ct] & IMG_IR_QUIRK_CODE_IRQ) || in img_ir_isr_hw()
969 hw->stopping) in img_ir_isr_hw()
982 hw->quirk_suspend_irq = img_ir_read(priv, IMG_IR_IRQ_ENABLE); in img_ir_isr_hw()
984 hw->quirk_suspend_irq & IMG_IR_IRQ_EDGE); in img_ir_isr_hw()
987 mod_timer(&hw->suspend_timer, in img_ir_isr_hw()
996 if (hw->ct_quirks[ct] & IMG_IR_QUIRK_CODE_LEN_INCR) in img_ir_isr_hw()
1008 if (!priv->hw.rdev) in img_ir_setup_hw()
1029 struct img_ir_priv_hw *hw = &priv->hw; in img_ir_probe_hw_caps() local
1034 hw->ct_quirks[IMG_IR_CODETYPE_PULSELEN] in img_ir_probe_hw_caps()
1036 hw->ct_quirks[IMG_IR_CODETYPE_BIPHASE] in img_ir_probe_hw_caps()
1038 hw->ct_quirks[IMG_IR_CODETYPE_2BITPULSEPOS] in img_ir_probe_hw_caps()
1044 struct img_ir_priv_hw *hw = &priv->hw; in img_ir_probe_hw() local
1055 setup_timer(&hw->end_timer, img_ir_end_timer, (unsigned long)priv); in img_ir_probe_hw()
1056 setup_timer(&hw->suspend_timer, img_ir_suspend_timer, in img_ir_probe_hw()
1061 hw->clk_hz = clk_get_rate(priv->clk); in img_ir_probe_hw()
1063 hw->clk_nb.notifier_call = img_ir_clk_notify; in img_ir_probe_hw()
1064 error = clk_notifier_register(priv->clk, &hw->clk_nb); in img_ir_probe_hw()
1070 hw->clk_hz = 32768; in img_ir_probe_hw()
1074 hw->rdev = rdev = rc_allocate_device(); in img_ir_probe_hw()
1106 hw->rdev = NULL; in img_ir_probe_hw()
1111 clk_notifier_unregister(priv->clk, &hw->clk_nb); in img_ir_probe_hw()
1118 struct img_ir_priv_hw *hw = &priv->hw; in img_ir_remove_hw() local
1119 struct rc_dev *rdev = hw->rdev; in img_ir_remove_hw()
1123 hw->rdev = NULL; in img_ir_remove_hw()
1127 clk_notifier_unregister(priv->clk, &hw->clk_nb); in img_ir_remove_hw()