media: cec: replace pin->cur_value by adap->cec_pin_is_high
authorHans Verkuil <hans.verkuil@cisco.com>
Sun, 20 Aug 2017 10:53:10 +0000 (06:53 -0400)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Sat, 26 Aug 2017 12:35:10 +0000 (08:35 -0400)
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: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/cec/cec-api.c
drivers/media/cec/cec-core.c
drivers/media/cec/cec-pin.c
include/media/cec-pin.h
include/media/cec.h

index 87649b0c6381141013f8dedbf5da2035b4f14752..a079f7fe018c4ab2529f30e6b412ee51aef4bae1 100644 (file)
@@ -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 ||
index e9db90997b0a05f2224ba6fa76f3ed273b27f1d3..648136e552d5bcbb6c553c96fe2116c0c4919c2c 100644 (file)
@@ -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;
index 970774de3dcd1848b62beeb147e975c305f14bcd..c003b8eac61762f8fa34e6e02c2138896aaa41d9 100644 (file)
@@ -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);
index d28d07fa312eaa987cbe7f6fd6e284d71f34d467..f09cc9579d53d19259419930b3d7d4c6a2a4e5a0 100644 (file)
@@ -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;
index 60b26fc18464e4f65dac754a3a50d2f3d71dcf84..df6b3bd3128493faf154834b421ab42345d6430c 100644 (file)
@@ -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;