Lines Matching full:cec
11 #include <media/cec-pin.h>
35 struct cec_gpio *cec = cec_get_drvdata(adap); in cec_gpio_read() local
37 if (cec->cec_is_low) in cec_gpio_read()
39 return gpiod_get_value(cec->cec_gpio); in cec_gpio_read()
44 struct cec_gpio *cec = cec_get_drvdata(adap); in cec_gpio_high() local
46 if (!cec->cec_is_low) in cec_gpio_high()
48 cec->cec_is_low = false; in cec_gpio_high()
49 gpiod_set_value(cec->cec_gpio, 1); in cec_gpio_high()
54 struct cec_gpio *cec = cec_get_drvdata(adap); in cec_gpio_low() local
56 if (cec->cec_is_low) in cec_gpio_low()
58 if (WARN_ON_ONCE(cec->cec_have_irq)) in cec_gpio_low()
59 free_irq(cec->cec_irq, cec); in cec_gpio_low()
60 cec->cec_have_irq = false; in cec_gpio_low()
61 cec->cec_is_low = true; in cec_gpio_low()
62 gpiod_set_value(cec->cec_gpio, 0); in cec_gpio_low()
67 struct cec_gpio *cec = priv; in cec_hpd_gpio_irq_handler_thread() local
69 cec_queue_pin_hpd_event(cec->adap, cec->hpd_is_high, cec->hpd_ts); in cec_hpd_gpio_irq_handler_thread()
75 struct cec_gpio *cec = priv; in cec_5v_gpio_irq_handler() local
76 bool is_high = gpiod_get_value(cec->v5_gpio); in cec_5v_gpio_irq_handler()
78 if (is_high == cec->v5_is_high) in cec_5v_gpio_irq_handler()
80 cec->v5_ts = ktime_get(); in cec_5v_gpio_irq_handler()
81 cec->v5_is_high = is_high; in cec_5v_gpio_irq_handler()
87 struct cec_gpio *cec = priv; in cec_5v_gpio_irq_handler_thread() local
89 cec_queue_pin_5v_event(cec->adap, cec->v5_is_high, cec->v5_ts); in cec_5v_gpio_irq_handler_thread()
95 struct cec_gpio *cec = priv; in cec_hpd_gpio_irq_handler() local
96 bool is_high = gpiod_get_value(cec->hpd_gpio); in cec_hpd_gpio_irq_handler()
98 if (is_high == cec->hpd_is_high) in cec_hpd_gpio_irq_handler()
100 cec->hpd_ts = ktime_get(); in cec_hpd_gpio_irq_handler()
101 cec->hpd_is_high = is_high; in cec_hpd_gpio_irq_handler()
107 struct cec_gpio *cec = priv; in cec_gpio_irq_handler() local
109 cec_pin_changed(cec->adap, gpiod_get_value(cec->cec_gpio)); in cec_gpio_irq_handler()
115 struct cec_gpio *cec = cec_get_drvdata(adap); in cec_gpio_enable_irq() local
117 if (cec->cec_have_irq) in cec_gpio_enable_irq()
120 if (request_irq(cec->cec_irq, cec_gpio_irq_handler, in cec_gpio_enable_irq()
122 adap->name, cec)) in cec_gpio_enable_irq()
124 cec->cec_have_irq = true; in cec_gpio_enable_irq()
130 struct cec_gpio *cec = cec_get_drvdata(adap); in cec_gpio_disable_irq() local
132 if (cec->cec_have_irq) in cec_gpio_disable_irq()
133 free_irq(cec->cec_irq, cec); in cec_gpio_disable_irq()
134 cec->cec_have_irq = false; in cec_gpio_disable_irq()
139 struct cec_gpio *cec = cec_get_drvdata(adap); in cec_gpio_status() local
141 seq_printf(file, "mode: %s\n", cec->cec_is_low ? "low-drive" : "read"); in cec_gpio_status()
142 if (cec->cec_have_irq) in cec_gpio_status()
143 seq_printf(file, "using irq: %d\n", cec->cec_irq); in cec_gpio_status()
144 if (cec->hpd_gpio) in cec_gpio_status()
146 cec->hpd_is_high ? "high" : "low"); in cec_gpio_status()
147 if (cec->v5_gpio) in cec_gpio_status()
149 cec->v5_is_high ? "high" : "low"); in cec_gpio_status()
154 struct cec_gpio *cec = cec_get_drvdata(adap); in cec_gpio_read_hpd() local
156 if (!cec->hpd_gpio) in cec_gpio_read_hpd()
158 return gpiod_get_value(cec->hpd_gpio); in cec_gpio_read_hpd()
163 struct cec_gpio *cec = cec_get_drvdata(adap); in cec_gpio_read_5v() local
165 if (!cec->v5_gpio) in cec_gpio_read_5v()
167 return gpiod_get_value(cec->v5_gpio); in cec_gpio_read_5v()
190 struct cec_gpio *cec; in cec_gpio_probe() local
193 cec = devm_kzalloc(dev, sizeof(*cec), GFP_KERNEL); in cec_gpio_probe()
194 if (!cec) in cec_gpio_probe()
197 cec->dev = dev; in cec_gpio_probe()
199 cec->cec_gpio = devm_gpiod_get(dev, "cec", GPIOD_OUT_HIGH_OPEN_DRAIN); in cec_gpio_probe()
200 if (IS_ERR(cec->cec_gpio)) in cec_gpio_probe()
201 return PTR_ERR(cec->cec_gpio); in cec_gpio_probe()
202 cec->cec_irq = gpiod_to_irq(cec->cec_gpio); in cec_gpio_probe()
204 cec->hpd_gpio = devm_gpiod_get_optional(dev, "hpd", GPIOD_IN); in cec_gpio_probe()
205 if (IS_ERR(cec->hpd_gpio)) in cec_gpio_probe()
206 return PTR_ERR(cec->hpd_gpio); in cec_gpio_probe()
208 cec->v5_gpio = devm_gpiod_get_optional(dev, "v5", GPIOD_IN); in cec_gpio_probe()
209 if (IS_ERR(cec->v5_gpio)) in cec_gpio_probe()
210 return PTR_ERR(cec->v5_gpio); in cec_gpio_probe()
212 cec->adap = cec_pin_allocate_adapter(&cec_gpio_pin_ops, in cec_gpio_probe()
213 cec, pdev->name, CEC_CAP_DEFAULTS | CEC_CAP_PHYS_ADDR | in cec_gpio_probe()
215 if (IS_ERR(cec->adap)) in cec_gpio_probe()
216 return PTR_ERR(cec->adap); in cec_gpio_probe()
218 if (cec->hpd_gpio) { in cec_gpio_probe()
219 cec->hpd_irq = gpiod_to_irq(cec->hpd_gpio); in cec_gpio_probe()
220 ret = devm_request_threaded_irq(dev, cec->hpd_irq, in cec_gpio_probe()
225 "hpd-gpio", cec); in cec_gpio_probe()
230 if (cec->v5_gpio) { in cec_gpio_probe()
231 cec->v5_irq = gpiod_to_irq(cec->v5_gpio); in cec_gpio_probe()
232 ret = devm_request_threaded_irq(dev, cec->v5_irq, in cec_gpio_probe()
237 "v5-gpio", cec); in cec_gpio_probe()
242 ret = cec_register_adapter(cec->adap, &pdev->dev); in cec_gpio_probe()
244 cec_delete_adapter(cec->adap); in cec_gpio_probe()
248 platform_set_drvdata(pdev, cec); in cec_gpio_probe()
254 struct cec_gpio *cec = platform_get_drvdata(pdev); in cec_gpio_remove() local
256 cec_unregister_adapter(cec->adap); in cec_gpio_remove()
262 .compatible = "cec-gpio",
272 .name = "cec-gpio",
281 MODULE_DESCRIPTION("CEC GPIO driver");