summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/media/cec/cec-api.c6
-rw-r--r--drivers/media/cec/cec-core.c1
-rw-r--r--drivers/media/cec/cec-pin.c5
-rw-r--r--include/media/cec-pin.h1
-rw-r--r--include/media/cec.h1
5 files changed, 6 insertions, 8 deletions
diff --git a/drivers/media/cec/cec-api.c b/drivers/media/cec/cec-api.c
index 87649b0c6381..a079f7fe018c 100644
--- a/drivers/media/cec/cec-api.c
+++ b/drivers/media/cec/cec-api.c
@@ -444,15 +444,13 @@ static long cec_s_mode(struct cec_adapter *adap, struct cec_fh *fh,
if (mode_follower == CEC_MODE_FOLLOWER)
adap->follower_cnt++;
if (mode_follower == CEC_MODE_MONITOR_PIN) {
-#ifdef CONFIG_CEC_PIN
struct cec_event ev = {
.flags = CEC_EVENT_FL_INITIAL_STATE,
};
- ev.event = adap->pin->cur_value ? CEC_EVENT_PIN_CEC_HIGH :
- CEC_EVENT_PIN_CEC_LOW;
+ ev.event = adap->cec_pin_is_high ? CEC_EVENT_PIN_CEC_HIGH :
+ CEC_EVENT_PIN_CEC_LOW;
cec_queue_event_fh(fh, &ev, 0);
-#endif
adap->monitor_pin_cnt++;
}
if (mode_follower == CEC_MODE_EXCL_FOLLOWER ||
diff --git a/drivers/media/cec/cec-core.c b/drivers/media/cec/cec-core.c
index e9db90997b0a..648136e552d5 100644
--- a/drivers/media/cec/cec-core.c
+++ b/drivers/media/cec/cec-core.c
@@ -227,6 +227,7 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
return ERR_PTR(-ENOMEM);
strlcpy(adap->name, name, sizeof(adap->name));
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.vendor_id = CEC_VENDOR_ID_NONE;
adap->capabilities = caps;
diff --git a/drivers/media/cec/cec-pin.c b/drivers/media/cec/cec-pin.c
index 970774de3dcd..c003b8eac617 100644
--- a/drivers/media/cec/cec-pin.c
+++ b/drivers/media/cec/cec-pin.c
@@ -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)
{
- if (!force && v == pin->cur_value)
+ if (!force && v == pin->adap->cec_pin_is_high)
return;
- pin->cur_value = v;
+ pin->adap->cec_pin_is_high = v;
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_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,
if (pin == NULL)
return ERR_PTR(-ENOMEM);
pin->ops = pin_ops;
- pin->cur_value = true;
hrtimer_init(&pin->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
pin->timer.function = cec_pin_timer;
init_waitqueue_head(&pin->kthread_waitq);
diff --git a/include/media/cec-pin.h b/include/media/cec-pin.h
index d28d07fa312e..f09cc9579d53 100644
--- a/include/media/cec-pin.h
+++ b/include/media/cec-pin.h
@@ -128,7 +128,6 @@ struct cec_pin {
u16 la_mask;
bool enabled;
bool monitor_all;
- bool cur_value;
bool rx_eom;
bool enable_irq_failed;
enum cec_pin_state state;
diff --git a/include/media/cec.h b/include/media/cec.h
index 60b26fc18464..df6b3bd31284 100644
--- a/include/media/cec.h
+++ b/include/media/cec.h
@@ -180,6 +180,7 @@ struct cec_adapter {
bool needs_hpd;
bool is_configuring;
bool is_configured;
+ bool cec_pin_is_high;
u32 monitor_all_cnt;
u32 monitor_pin_cnt;
u32 follower_cnt;