linux/include/linux/extcon-provider.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * External Connector (extcon) framework
   4 * - linux/include/linux/extcon-provider.h for extcon provider device driver.
   5 *
   6 * Copyright (C) 2017 Samsung Electronics
   7 * Author: Chanwoo Choi <cw00.choi@samsung.com>
   8 */
   9
  10#ifndef __LINUX_EXTCON_PROVIDER_H__
  11#define __LINUX_EXTCON_PROVIDER_H__
  12
  13#include <linux/extcon.h>
  14
  15struct extcon_dev;
  16
  17#if IS_ENABLED(CONFIG_EXTCON)
  18
  19/* Following APIs register/unregister the extcon device. */
  20extern int extcon_dev_register(struct extcon_dev *edev);
  21extern void extcon_dev_unregister(struct extcon_dev *edev);
  22extern int devm_extcon_dev_register(struct device *dev,
  23                                struct extcon_dev *edev);
  24extern void devm_extcon_dev_unregister(struct device *dev,
  25                                struct extcon_dev *edev);
  26
  27/* Following APIs allocate/free the memory of the extcon device. */
  28extern struct extcon_dev *extcon_dev_allocate(const unsigned int *cable);
  29extern void extcon_dev_free(struct extcon_dev *edev);
  30extern struct extcon_dev *devm_extcon_dev_allocate(struct device *dev,
  31                                const unsigned int *cable);
  32extern void devm_extcon_dev_free(struct device *dev, struct extcon_dev *edev);
  33
  34/* Synchronize the state and property value for each external connector. */
  35extern int extcon_sync(struct extcon_dev *edev, unsigned int id);
  36
  37/*
  38 * Following APIs set the connected state of each external connector.
  39 * The 'id' argument indicates the defined external connector.
  40 */
  41extern int extcon_set_state(struct extcon_dev *edev, unsigned int id,
  42                                bool state);
  43extern int extcon_set_state_sync(struct extcon_dev *edev, unsigned int id,
  44                                bool state);
  45
  46/*
  47 * Following APIs set the property of each external connector.
  48 * The 'id' argument indicates the defined external connector
  49 * and the 'prop' indicates the extcon property.
  50 *
  51 * And extcon_set_property_capability() set the capability of the property
  52 * for each external connector. They are used to set the capability of the
  53 * property of each external connector based on the id and property.
  54 */
  55extern int extcon_set_property(struct extcon_dev *edev, unsigned int id,
  56                                unsigned int prop,
  57                                union extcon_property_value prop_val);
  58extern int extcon_set_property_sync(struct extcon_dev *edev, unsigned int id,
  59                                unsigned int prop,
  60                                union extcon_property_value prop_val);
  61extern int extcon_set_property_capability(struct extcon_dev *edev,
  62                                unsigned int id, unsigned int prop);
  63
  64#else /* CONFIG_EXTCON */
  65static inline int extcon_dev_register(struct extcon_dev *edev)
  66{
  67        return 0;
  68}
  69
  70static inline void extcon_dev_unregister(struct extcon_dev *edev) { }
  71
  72static inline int devm_extcon_dev_register(struct device *dev,
  73                                struct extcon_dev *edev)
  74{
  75        return -EINVAL;
  76}
  77
  78static inline void devm_extcon_dev_unregister(struct device *dev,
  79                                struct extcon_dev *edev) { }
  80
  81static inline struct extcon_dev *extcon_dev_allocate(const unsigned int *cable)
  82{
  83        return ERR_PTR(-ENOSYS);
  84}
  85
  86static inline void extcon_dev_free(struct extcon_dev *edev) { }
  87
  88static inline struct extcon_dev *devm_extcon_dev_allocate(struct device *dev,
  89                                const unsigned int *cable)
  90{
  91        return ERR_PTR(-ENOSYS);
  92}
  93
  94static inline void devm_extcon_dev_free(struct extcon_dev *edev) { }
  95
  96
  97static inline int extcon_set_state(struct extcon_dev *edev, unsigned int id,
  98                                bool state)
  99{
 100        return 0;
 101}
 102
 103static inline int extcon_set_state_sync(struct extcon_dev *edev, unsigned int id,
 104                                bool state)
 105{
 106        return 0;
 107}
 108
 109static inline int extcon_sync(struct extcon_dev *edev, unsigned int id)
 110{
 111        return 0;
 112}
 113
 114static inline int extcon_set_property(struct extcon_dev *edev, unsigned int id,
 115                                unsigned int prop,
 116                                union extcon_property_value prop_val)
 117{
 118        return 0;
 119}
 120
 121static inline int extcon_set_property_sync(struct extcon_dev *edev,
 122                                unsigned int id, unsigned int prop,
 123                                union extcon_property_value prop_val)
 124{
 125        return 0;
 126}
 127
 128static inline int extcon_set_property_capability(struct extcon_dev *edev,
 129                                unsigned int id, unsigned int prop)
 130{
 131        return 0;
 132}
 133#endif /* CONFIG_EXTCON */
 134#endif /* __LINUX_EXTCON_PROVIDER_H__ */
 135