Lines Matching refs:ir

65 static void meson_ir_set_mask(struct meson_ir *ir, unsigned int reg,  in meson_ir_set_mask()  argument
70 data = readl(ir->reg + reg); in meson_ir_set_mask()
73 writel(data, ir->reg + reg); in meson_ir_set_mask()
78 struct meson_ir *ir = dev_id; in meson_ir_irq() local
82 spin_lock(&ir->lock); in meson_ir_irq()
84 duration = readl(ir->reg + IR_DEC_REG1); in meson_ir_irq()
88 rawir.pulse = !!(readl(ir->reg + IR_DEC_STATUS) & STATUS_IR_DEC_IN); in meson_ir_irq()
90 ir_raw_event_store_with_filter(ir->rc, &rawir); in meson_ir_irq()
91 ir_raw_event_handle(ir->rc); in meson_ir_irq()
93 spin_unlock(&ir->lock); in meson_ir_irq()
104 struct meson_ir *ir; in meson_ir_probe() local
107 ir = devm_kzalloc(dev, sizeof(struct meson_ir), GFP_KERNEL); in meson_ir_probe()
108 if (!ir) in meson_ir_probe()
112 ir->reg = devm_ioremap_resource(dev, res); in meson_ir_probe()
113 if (IS_ERR(ir->reg)) { in meson_ir_probe()
115 return PTR_ERR(ir->reg); in meson_ir_probe()
118 ir->irq = platform_get_irq(pdev, 0); in meson_ir_probe()
119 if (ir->irq < 0) { in meson_ir_probe()
121 return ir->irq; in meson_ir_probe()
124 ir->rc = rc_allocate_device(); in meson_ir_probe()
125 if (!ir->rc) { in meson_ir_probe()
130 ir->rc->priv = ir; in meson_ir_probe()
131 ir->rc->input_name = DRIVER_NAME; in meson_ir_probe()
132 ir->rc->input_phys = DRIVER_NAME "/input0"; in meson_ir_probe()
133 ir->rc->input_id.bustype = BUS_HOST; in meson_ir_probe()
135 ir->rc->map_name = map_name ? map_name : RC_MAP_EMPTY; in meson_ir_probe()
136 ir->rc->dev.parent = dev; in meson_ir_probe()
137 ir->rc->driver_type = RC_DRIVER_IR_RAW; in meson_ir_probe()
138 ir->rc->allowed_protocols = RC_BIT_ALL; in meson_ir_probe()
139 ir->rc->rx_resolution = US_TO_NS(MESON_TRATE); in meson_ir_probe()
140 ir->rc->timeout = MS_TO_NS(200); in meson_ir_probe()
141 ir->rc->driver_name = DRIVER_NAME; in meson_ir_probe()
143 spin_lock_init(&ir->lock); in meson_ir_probe()
144 platform_set_drvdata(pdev, ir); in meson_ir_probe()
146 ret = rc_register_device(ir->rc); in meson_ir_probe()
152 ret = devm_request_irq(dev, ir->irq, meson_ir_irq, 0, "ir-meson", ir); in meson_ir_probe()
159 meson_ir_set_mask(ir, IR_DEC_REG1, REG1_RESET, REG1_RESET); in meson_ir_probe()
160 meson_ir_set_mask(ir, IR_DEC_REG1, REG1_RESET, 0); in meson_ir_probe()
162 meson_ir_set_mask(ir, IR_DEC_REG1, REG1_MODE_MASK, REG1_MODE_GENERAL); in meson_ir_probe()
164 meson_ir_set_mask(ir, IR_DEC_REG0, REG0_RATE_MASK, MESON_TRATE - 1); in meson_ir_probe()
166 meson_ir_set_mask(ir, IR_DEC_REG1, REG1_IRQSEL_MASK, in meson_ir_probe()
169 meson_ir_set_mask(ir, IR_DEC_REG1, REG1_ENABLE, REG1_ENABLE); in meson_ir_probe()
175 rc_unregister_device(ir->rc); in meson_ir_probe()
176 ir->rc = NULL; in meson_ir_probe()
178 rc_free_device(ir->rc); in meson_ir_probe()
185 struct meson_ir *ir = platform_get_drvdata(pdev); in meson_ir_remove() local
189 spin_lock_irqsave(&ir->lock, flags); in meson_ir_remove()
190 meson_ir_set_mask(ir, IR_DEC_REG1, REG1_ENABLE, 0); in meson_ir_remove()
191 spin_unlock_irqrestore(&ir->lock, flags); in meson_ir_remove()
193 rc_unregister_device(ir->rc); in meson_ir_remove()