Commit 28e11b15 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

media: cec: replace pin->cur_value by adap->cec_pin_is_high

The current CEC pin value (0 or 1) was part of the cec_pin struct,
but that assumes that CEC pin monitoring can only be used with
a driver that uses the low-level CEC pin framework.

But hardware that has both a high-level API and can monitor the
CEC pin at low-level at the same time does not need to depend on
the cec pin framework.

To support such devices remove the cur_value field from struct cec_pin
and add a cec_pin_is_high field to cec_adapter. This also makes it
possible to drop the '#ifdef CONFIG_CEC_PIN' in cec-api.c.
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 152b0a9a
...@@ -444,15 +444,13 @@ static long cec_s_mode(struct cec_adapter *adap, struct cec_fh *fh, ...@@ -444,15 +444,13 @@ static long cec_s_mode(struct cec_adapter *adap, struct cec_fh *fh,
if (mode_follower == CEC_MODE_FOLLOWER) if (mode_follower == CEC_MODE_FOLLOWER)
adap->follower_cnt++; adap->follower_cnt++;
if (mode_follower == CEC_MODE_MONITOR_PIN) { if (mode_follower == CEC_MODE_MONITOR_PIN) {
#ifdef CONFIG_CEC_PIN
struct cec_event ev = { struct cec_event ev = {
.flags = CEC_EVENT_FL_INITIAL_STATE, .flags = CEC_EVENT_FL_INITIAL_STATE,
}; };
ev.event = adap->pin->cur_value ? CEC_EVENT_PIN_CEC_HIGH : ev.event = adap->cec_pin_is_high ? CEC_EVENT_PIN_CEC_HIGH :
CEC_EVENT_PIN_CEC_LOW; CEC_EVENT_PIN_CEC_LOW;
cec_queue_event_fh(fh, &ev, 0); cec_queue_event_fh(fh, &ev, 0);
#endif
adap->monitor_pin_cnt++; adap->monitor_pin_cnt++;
} }
if (mode_follower == CEC_MODE_EXCL_FOLLOWER || if (mode_follower == CEC_MODE_EXCL_FOLLOWER ||
......
...@@ -227,6 +227,7 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops, ...@@ -227,6 +227,7 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
strlcpy(adap->name, name, sizeof(adap->name)); strlcpy(adap->name, name, sizeof(adap->name));
adap->phys_addr = CEC_PHYS_ADDR_INVALID; adap->phys_addr = CEC_PHYS_ADDR_INVALID;
adap->cec_pin_is_high = true;
adap->log_addrs.cec_version = CEC_OP_CEC_VERSION_2_0; adap->log_addrs.cec_version = CEC_OP_CEC_VERSION_2_0;
adap->log_addrs.vendor_id = CEC_VENDOR_ID_NONE; adap->log_addrs.vendor_id = CEC_VENDOR_ID_NONE;
adap->capabilities = caps; adap->capabilities = caps;
......
...@@ -88,10 +88,10 @@ static const struct cec_state states[CEC_PIN_STATES] = { ...@@ -88,10 +88,10 @@ static const struct cec_state states[CEC_PIN_STATES] = {
static void cec_pin_update(struct cec_pin *pin, bool v, bool force) static void cec_pin_update(struct cec_pin *pin, bool v, bool force)
{ {
if (!force && v == pin->cur_value) if (!force && v == pin->adap->cec_pin_is_high)
return; return;
pin->cur_value = v; pin->adap->cec_pin_is_high = v;
if (atomic_read(&pin->work_pin_events) < CEC_NUM_PIN_EVENTS) { if (atomic_read(&pin->work_pin_events) < CEC_NUM_PIN_EVENTS) {
pin->work_pin_is_high[pin->work_pin_events_wr] = v; pin->work_pin_is_high[pin->work_pin_events_wr] = v;
pin->work_pin_ts[pin->work_pin_events_wr] = ktime_get(); pin->work_pin_ts[pin->work_pin_events_wr] = ktime_get();
...@@ -781,7 +781,6 @@ struct cec_adapter *cec_pin_allocate_adapter(const struct cec_pin_ops *pin_ops, ...@@ -781,7 +781,6 @@ struct cec_adapter *cec_pin_allocate_adapter(const struct cec_pin_ops *pin_ops,
if (pin == NULL) if (pin == NULL)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
pin->ops = pin_ops; pin->ops = pin_ops;
pin->cur_value = true;
hrtimer_init(&pin->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); hrtimer_init(&pin->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
pin->timer.function = cec_pin_timer; pin->timer.function = cec_pin_timer;
init_waitqueue_head(&pin->kthread_waitq); init_waitqueue_head(&pin->kthread_waitq);
......
...@@ -128,7 +128,6 @@ struct cec_pin { ...@@ -128,7 +128,6 @@ struct cec_pin {
u16 la_mask; u16 la_mask;
bool enabled; bool enabled;
bool monitor_all; bool monitor_all;
bool cur_value;
bool rx_eom; bool rx_eom;
bool enable_irq_failed; bool enable_irq_failed;
enum cec_pin_state state; enum cec_pin_state state;
......
...@@ -180,6 +180,7 @@ struct cec_adapter { ...@@ -180,6 +180,7 @@ struct cec_adapter {
bool needs_hpd; bool needs_hpd;
bool is_configuring; bool is_configuring;
bool is_configured; bool is_configured;
bool cec_pin_is_high;
u32 monitor_all_cnt; u32 monitor_all_cnt;
u32 monitor_pin_cnt; u32 monitor_pin_cnt;
u32 follower_cnt; u32 follower_cnt;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment