cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

extcon.h (10399B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * External Connector (extcon) framework
      4 * - linux/include/linux/extcon.h for extcon consumer device driver.
      5 *
      6 * Copyright (C) 2015 Samsung Electronics
      7 * Author: Chanwoo Choi <cw00.choi@samsung.com>
      8 *
      9 * Copyright (C) 2012 Samsung Electronics
     10 * Author: Donggeun Kim <dg77.kim@samsung.com>
     11 * Author: MyungJoo Ham <myungjoo.ham@samsung.com>
     12 *
     13 * based on switch class driver
     14 * Copyright (C) 2008 Google, Inc.
     15 * Author: Mike Lockwood <lockwood@android.com>
     16 */
     17
     18#ifndef __LINUX_EXTCON_H__
     19#define __LINUX_EXTCON_H__
     20
     21#include <linux/device.h>
     22
     23/*
     24 * Define the type of supported external connectors
     25 */
     26#define EXTCON_TYPE_USB		BIT(0)	/* USB connector */
     27#define EXTCON_TYPE_CHG		BIT(1)	/* Charger connector */
     28#define EXTCON_TYPE_JACK	BIT(2)	/* Jack connector */
     29#define EXTCON_TYPE_DISP	BIT(3)	/* Display connector */
     30#define EXTCON_TYPE_MISC	BIT(4)	/* Miscellaneous connector */
     31
     32/*
     33 * Define the unique id of supported external connectors
     34 */
     35#define EXTCON_NONE		0
     36
     37/* USB external connector */
     38#define EXTCON_USB		1
     39#define EXTCON_USB_HOST		2
     40
     41/*
     42 * Charging external connector
     43 *
     44 * When one SDP charger connector was reported, we should also report
     45 * the USB connector, which means EXTCON_CHG_USB_SDP should always
     46 * appear together with EXTCON_USB. The same as ACA charger connector,
     47 * EXTCON_CHG_USB_ACA would normally appear with EXTCON_USB_HOST.
     48 *
     49 * The EXTCON_CHG_USB_SLOW connector can provide at least 500mA of
     50 * current at 5V. The EXTCON_CHG_USB_FAST connector can provide at
     51 * least 1A of current at 5V.
     52 */
     53#define EXTCON_CHG_USB_SDP	5	/* Standard Downstream Port */
     54#define EXTCON_CHG_USB_DCP	6	/* Dedicated Charging Port */
     55#define EXTCON_CHG_USB_CDP	7	/* Charging Downstream Port */
     56#define EXTCON_CHG_USB_ACA	8	/* Accessory Charger Adapter */
     57#define EXTCON_CHG_USB_FAST	9
     58#define EXTCON_CHG_USB_SLOW	10
     59#define EXTCON_CHG_WPT		11	/* Wireless Power Transfer */
     60#define EXTCON_CHG_USB_PD	12	/* USB Power Delivery */
     61
     62/* Jack external connector */
     63#define EXTCON_JACK_MICROPHONE	20
     64#define EXTCON_JACK_HEADPHONE	21
     65#define EXTCON_JACK_LINE_IN	22
     66#define EXTCON_JACK_LINE_OUT	23
     67#define EXTCON_JACK_VIDEO_IN	24
     68#define EXTCON_JACK_VIDEO_OUT	25
     69#define EXTCON_JACK_SPDIF_IN	26	/* Sony Philips Digital InterFace */
     70#define EXTCON_JACK_SPDIF_OUT	27
     71
     72/* Display external connector */
     73#define EXTCON_DISP_HDMI	40	/* High-Definition Multimedia Interface */
     74#define EXTCON_DISP_MHL		41	/* Mobile High-Definition Link */
     75#define EXTCON_DISP_DVI		42	/* Digital Visual Interface */
     76#define EXTCON_DISP_VGA		43	/* Video Graphics Array */
     77#define EXTCON_DISP_DP		44	/* Display Port */
     78#define EXTCON_DISP_HMD		45	/* Head-Mounted Display */
     79
     80/* Miscellaneous external connector */
     81#define EXTCON_DOCK		60
     82#define EXTCON_JIG		61
     83#define EXTCON_MECHANICAL	62
     84
     85#define EXTCON_NUM		63
     86
     87/*
     88 * Define the properties of supported external connectors.
     89 *
     90 * When adding the new extcon property, they *must* have
     91 * the type/value/default information. Also, you *have to*
     92 * modify the EXTCON_PROP_[type]_START/END definitions
     93 * which mean the range of the supported properties
     94 * for each extcon type.
     95 *
     96 * The naming style of property
     97 * : EXTCON_PROP_[type]_[property name]
     98 *
     99 * EXTCON_PROP_USB_[property name]	: USB property
    100 * EXTCON_PROP_CHG_[property name]	: Charger property
    101 * EXTCON_PROP_JACK_[property name]	: Jack property
    102 * EXTCON_PROP_DISP_[property name]	: Display property
    103 */
    104
    105/*
    106 * Properties of EXTCON_TYPE_USB.
    107 *
    108 * - EXTCON_PROP_USB_VBUS
    109 * @type:	integer (intval)
    110 * @value:	0 (low) or 1 (high)
    111 * @default:	0 (low)
    112 * - EXTCON_PROP_USB_TYPEC_POLARITY
    113 * @type:	integer (intval)
    114 * @value:	0 (normal) or 1 (flip)
    115 * @default:	0 (normal)
    116 * - EXTCON_PROP_USB_SS (SuperSpeed)
    117 * @type:       integer (intval)
    118 * @value:      0 (USB/USB2) or 1 (USB3)
    119 * @default:    0 (USB/USB2)
    120 *
    121 */
    122#define EXTCON_PROP_USB_VBUS		0
    123#define EXTCON_PROP_USB_TYPEC_POLARITY	1
    124#define EXTCON_PROP_USB_SS		2
    125
    126#define EXTCON_PROP_USB_MIN		0
    127#define EXTCON_PROP_USB_MAX		2
    128#define EXTCON_PROP_USB_CNT	(EXTCON_PROP_USB_MAX - EXTCON_PROP_USB_MIN + 1)
    129
    130/* Properties of EXTCON_TYPE_CHG. */
    131#define EXTCON_PROP_CHG_MIN		50
    132#define EXTCON_PROP_CHG_MAX		50
    133#define EXTCON_PROP_CHG_CNT	(EXTCON_PROP_CHG_MAX - EXTCON_PROP_CHG_MIN + 1)
    134
    135/* Properties of EXTCON_TYPE_JACK. */
    136#define EXTCON_PROP_JACK_MIN		100
    137#define EXTCON_PROP_JACK_MAX		100
    138#define EXTCON_PROP_JACK_CNT (EXTCON_PROP_JACK_MAX - EXTCON_PROP_JACK_MIN + 1)
    139
    140/*
    141 * Properties of EXTCON_TYPE_DISP.
    142 *
    143 * - EXTCON_PROP_DISP_HPD (Hot Plug Detect)
    144 * @type:       integer (intval)
    145 * @value:      0 (no hpd) or 1 (hpd)
    146 * @default:    0 (no hpd)
    147 *
    148 */
    149#define EXTCON_PROP_DISP_HPD		150
    150
    151/* Properties of EXTCON_TYPE_DISP. */
    152#define EXTCON_PROP_DISP_MIN		150
    153#define EXTCON_PROP_DISP_MAX		151
    154#define EXTCON_PROP_DISP_CNT (EXTCON_PROP_DISP_MAX - EXTCON_PROP_DISP_MIN + 1)
    155
    156/*
    157 * Define the type of property's value.
    158 *
    159 * Define the property's value as union type. Because each property
    160 * would need the different data type to store it.
    161 */
    162union extcon_property_value {
    163	int intval;	/* type : integer (intval) */
    164};
    165
    166struct extcon_dev;
    167
    168#if IS_ENABLED(CONFIG_EXTCON)
    169/*
    170 * Following APIs get the connected state of each external connector.
    171 * The 'id' argument indicates the defined external connector.
    172 */
    173int extcon_get_state(struct extcon_dev *edev, unsigned int id);
    174
    175/*
    176 * Following APIs get the property of each external connector.
    177 * The 'id' argument indicates the defined external connector
    178 * and the 'prop' indicates the extcon property.
    179 *
    180 * And extcon_get_property_capability() get the capability of the property
    181 * for each external connector. They are used to get the capability of the
    182 * property of each external connector based on the id and property.
    183 */
    184int extcon_get_property(struct extcon_dev *edev, unsigned int id,
    185				unsigned int prop,
    186				union extcon_property_value *prop_val);
    187int extcon_get_property_capability(struct extcon_dev *edev,
    188				unsigned int id, unsigned int prop);
    189
    190/*
    191 * Following APIs register the notifier block in order to detect
    192 * the change of both state and property value for each external connector.
    193 *
    194 * extcon_register_notifier(*edev, id, *nb) : Register a notifier block
    195 *			for specific external connector of the extcon.
    196 * extcon_register_notifier_all(*edev, *nb) : Register a notifier block
    197 *			for all supported external connectors of the extcon.
    198 */
    199int extcon_register_notifier(struct extcon_dev *edev, unsigned int id,
    200				struct notifier_block *nb);
    201int extcon_unregister_notifier(struct extcon_dev *edev, unsigned int id,
    202				struct notifier_block *nb);
    203int devm_extcon_register_notifier(struct device *dev,
    204				struct extcon_dev *edev, unsigned int id,
    205				struct notifier_block *nb);
    206void devm_extcon_unregister_notifier(struct device *dev,
    207				struct extcon_dev *edev, unsigned int id,
    208				struct notifier_block *nb);
    209
    210int extcon_register_notifier_all(struct extcon_dev *edev,
    211				struct notifier_block *nb);
    212int extcon_unregister_notifier_all(struct extcon_dev *edev,
    213				struct notifier_block *nb);
    214int devm_extcon_register_notifier_all(struct device *dev,
    215				struct extcon_dev *edev,
    216				struct notifier_block *nb);
    217void devm_extcon_unregister_notifier_all(struct device *dev,
    218				struct extcon_dev *edev,
    219				struct notifier_block *nb);
    220
    221/*
    222 * Following APIs get the extcon_dev from devicetree or by through extcon name.
    223 */
    224struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name);
    225struct extcon_dev *extcon_find_edev_by_node(struct device_node *node);
    226struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev,
    227						     int index);
    228
    229/* Following API get the name of extcon device. */
    230const char *extcon_get_edev_name(struct extcon_dev *edev);
    231
    232#else /* CONFIG_EXTCON */
    233static inline int extcon_get_state(struct extcon_dev *edev, unsigned int id)
    234{
    235	return 0;
    236}
    237
    238static inline int extcon_get_property(struct extcon_dev *edev, unsigned int id,
    239				unsigned int prop,
    240				union extcon_property_value *prop_val)
    241{
    242	return 0;
    243}
    244
    245static inline int extcon_get_property_capability(struct extcon_dev *edev,
    246				unsigned int id, unsigned int prop)
    247{
    248	return 0;
    249}
    250
    251static inline int extcon_register_notifier(struct extcon_dev *edev,
    252				unsigned int id, struct notifier_block *nb)
    253{
    254	return 0;
    255}
    256
    257static inline int extcon_unregister_notifier(struct extcon_dev *edev,
    258				unsigned int id, struct notifier_block *nb)
    259{
    260	return 0;
    261}
    262
    263static inline int devm_extcon_register_notifier(struct device *dev,
    264				struct extcon_dev *edev, unsigned int id,
    265				struct notifier_block *nb)
    266{
    267	return -ENOSYS;
    268}
    269
    270static inline  void devm_extcon_unregister_notifier(struct device *dev,
    271				struct extcon_dev *edev, unsigned int id,
    272				struct notifier_block *nb) { }
    273
    274static inline int extcon_register_notifier_all(struct extcon_dev *edev,
    275					       struct notifier_block *nb)
    276{
    277	return 0;
    278}
    279
    280static inline int extcon_unregister_notifier_all(struct extcon_dev *edev,
    281						 struct notifier_block *nb)
    282{
    283	return 0;
    284}
    285
    286static inline int devm_extcon_register_notifier_all(struct device *dev,
    287						    struct extcon_dev *edev,
    288						    struct notifier_block *nb)
    289{
    290	return 0;
    291}
    292
    293static inline void devm_extcon_unregister_notifier_all(struct device *dev,
    294						       struct extcon_dev *edev,
    295						       struct notifier_block *nb) { }
    296
    297static inline struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name)
    298{
    299	return NULL;
    300}
    301
    302static inline struct extcon_dev *extcon_find_edev_by_node(struct device_node *node)
    303{
    304	return ERR_PTR(-ENODEV);
    305}
    306
    307static inline struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev,
    308				int index)
    309{
    310	return ERR_PTR(-ENODEV);
    311}
    312
    313static inline const char *extcon_get_edev_name(struct extcon_dev *edev)
    314{
    315	return NULL;
    316}
    317#endif /* CONFIG_EXTCON */
    318
    319/*
    320 * Following structure and API are deprecated. EXTCON remains the function
    321 * definition to prevent the build break.
    322 */
    323struct extcon_specific_cable_nb {
    324       struct notifier_block *user_nb;
    325       int cable_index;
    326       struct extcon_dev *edev;
    327       unsigned long previous_value;
    328};
    329
    330static inline int extcon_register_interest(struct extcon_specific_cable_nb *obj,
    331				const char *extcon_name, const char *cable_name,
    332				struct notifier_block *nb)
    333{
    334	return -EINVAL;
    335}
    336
    337static inline int extcon_unregister_interest(struct extcon_specific_cable_nb *obj)
    338{
    339	return -EINVAL;
    340}
    341#endif /* __LINUX_EXTCON_H__ */