root/include/media/cec-pin.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * cec-pin.h - low-level CEC pin control
   4  *
   5  * Copyright 2017 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
   6  */
   7 
   8 #ifndef LINUX_CEC_PIN_H
   9 #define LINUX_CEC_PIN_H
  10 
  11 #include <linux/types.h>
  12 #include <media/cec.h>
  13 
  14 /**
  15  * struct cec_pin_ops - low-level CEC pin operations
  16  * @read:       read the CEC pin. Return true if high, false if low.
  17  * @low:        drive the CEC pin low.
  18  * @high:       stop driving the CEC pin. The pull-up will drive the pin
  19  *              high, unless someone else is driving the pin low.
  20  * @enable_irq: optional, enable the interrupt to detect pin voltage changes.
  21  * @disable_irq: optional, disable the interrupt.
  22  * @free:       optional. Free any allocated resources. Called when the
  23  *              adapter is deleted.
  24  * @status:     optional, log status information.
  25  * @read_hpd:   read the HPD pin. Return true if high, false if low or
  26  *              an error if negative. If NULL or -ENOTTY is returned,
  27  *              then this is not supported.
  28  * @read_5v:    read the 5V pin. Return true if high, false if low or
  29  *              an error if negative. If NULL or -ENOTTY is returned,
  30  *              then this is not supported.
  31  *
  32  * These operations are used by the cec pin framework to manipulate
  33  * the CEC pin.
  34  */
  35 struct cec_pin_ops {
  36         bool (*read)(struct cec_adapter *adap);
  37         void (*low)(struct cec_adapter *adap);
  38         void (*high)(struct cec_adapter *adap);
  39         bool (*enable_irq)(struct cec_adapter *adap);
  40         void (*disable_irq)(struct cec_adapter *adap);
  41         void (*free)(struct cec_adapter *adap);
  42         void (*status)(struct cec_adapter *adap, struct seq_file *file);
  43         int  (*read_hpd)(struct cec_adapter *adap);
  44         int  (*read_5v)(struct cec_adapter *adap);
  45 };
  46 
  47 /**
  48  * cec_pin_changed() - update pin state from interrupt
  49  *
  50  * @adap:       pointer to the cec adapter
  51  * @value:      when true the pin is high, otherwise it is low
  52  *
  53  * If changes of the CEC voltage are detected via an interrupt, then
  54  * cec_pin_changed is called from the interrupt with the new value.
  55  */
  56 void cec_pin_changed(struct cec_adapter *adap, bool value);
  57 
  58 /**
  59  * cec_pin_allocate_adapter() - allocate a pin-based cec adapter
  60  *
  61  * @pin_ops:    low-level pin operations
  62  * @priv:       will be stored in adap->priv and can be used by the adapter ops.
  63  *              Use cec_get_drvdata(adap) to get the priv pointer.
  64  * @name:       the name of the CEC adapter. Note: this name will be copied.
  65  * @caps:       capabilities of the CEC adapter. This will be ORed with
  66  *              CEC_CAP_MONITOR_ALL and CEC_CAP_MONITOR_PIN.
  67  *
  68  * Allocate a cec adapter using the cec pin framework.
  69  *
  70  * Return: a pointer to the cec adapter or an error pointer
  71  */
  72 struct cec_adapter *cec_pin_allocate_adapter(const struct cec_pin_ops *pin_ops,
  73                                         void *priv, const char *name, u32 caps);
  74 
  75 #endif

/* [<][>][^][v][top][bottom][index][help] */