176aa36012
The extcon has two type of extcon devices as following. - 'extcon provider deivce' adds new extcon device and detect the state/properties of external connector. Also, it notifies the state/properties to the extcon consumer device. - 'extcon consumer device' gets the change state/properties from extcon provider device. Prior to that, include/linux/extcon.h contains all exported API for both provider and consumer device driver. To clarify the meaning of header file and to remove the wrong use-case on consumer device, this patch separates into extcon.h and extcon-provider.h. [Description for include/linux/{extcon.h|extcon-provider.h}] - extcon.h includes the extcon API and data structure for extcon consumer device driver. This header file contains the following APIs: : Register/unregister the notifier to catch the change of extcon device : Get the extcon device instance : Get the extcon device name : Get the state of each external connector : Get the property value of each external connector : Get the property capability of each external connector - extcon-provider.h includes the extcon API and data structure for extcon provider device driver. This header file contains the following APIs: : Include 'include/linux/extcon.h' : Allocate the memory for extcon device instance : Register/unregister extcon device : Set the state of each external connector : Set the property value of each external connector : Set the property capability of each external connector Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com> Acked-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk> Acked-by: Chen-Yu Tsai <wens@csie.org> Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com> Acked-by: Lee Jones <lee.jones@linaro.org> Acked-by: Felipe Balbi <felipe.balbi@linux.intel.com> Acked-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> Acked-by: Kishon Vijay Abraham I <kishon@ti.com>
142 lines
4.3 KiB
C
142 lines
4.3 KiB
C
/*
|
|
* External Connector (extcon) framework
|
|
* - linux/include/linux/extcon-provider.h for extcon provider device driver.
|
|
*
|
|
* Copyright (C) 2017 Samsung Electronics
|
|
* Author: Chanwoo Choi <cw00.choi@samsung.com>
|
|
*
|
|
* This software is licensed under the terms of the GNU General Public
|
|
* License version 2, as published by the Free Software Foundation, and
|
|
* may be copied, distributed, and modified under those terms.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#ifndef __LINUX_EXTCON_PROVIDER_H__
|
|
#define __LINUX_EXTCON_PROVIDER_H__
|
|
|
|
#include <linux/extcon.h>
|
|
|
|
struct extcon_dev;
|
|
|
|
#if IS_ENABLED(CONFIG_EXTCON)
|
|
|
|
/* Following APIs register/unregister the extcon device. */
|
|
extern int extcon_dev_register(struct extcon_dev *edev);
|
|
extern void extcon_dev_unregister(struct extcon_dev *edev);
|
|
extern int devm_extcon_dev_register(struct device *dev,
|
|
struct extcon_dev *edev);
|
|
extern void devm_extcon_dev_unregister(struct device *dev,
|
|
struct extcon_dev *edev);
|
|
|
|
/* Following APIs allocate/free the memory of the extcon device. */
|
|
extern struct extcon_dev *extcon_dev_allocate(const unsigned int *cable);
|
|
extern void extcon_dev_free(struct extcon_dev *edev);
|
|
extern struct extcon_dev *devm_extcon_dev_allocate(struct device *dev,
|
|
const unsigned int *cable);
|
|
extern void devm_extcon_dev_free(struct device *dev, struct extcon_dev *edev);
|
|
|
|
/* Synchronize the state and property value for each external connector. */
|
|
extern int extcon_sync(struct extcon_dev *edev, unsigned int id);
|
|
|
|
/*
|
|
* Following APIs set the connected state of each external connector.
|
|
* The 'id' argument indicates the defined external connector.
|
|
*/
|
|
extern int extcon_set_state(struct extcon_dev *edev, unsigned int id,
|
|
bool state);
|
|
extern int extcon_set_state_sync(struct extcon_dev *edev, unsigned int id,
|
|
bool state);
|
|
|
|
/*
|
|
* Following APIs set the property of each external connector.
|
|
* The 'id' argument indicates the defined external connector
|
|
* and the 'prop' indicates the extcon property.
|
|
*
|
|
* And extcon_set_property_capability() set the capability of the property
|
|
* for each external connector. They are used to set the capability of the
|
|
* property of each external connector based on the id and property.
|
|
*/
|
|
extern int extcon_set_property(struct extcon_dev *edev, unsigned int id,
|
|
unsigned int prop,
|
|
union extcon_property_value prop_val);
|
|
extern int extcon_set_property_sync(struct extcon_dev *edev, unsigned int id,
|
|
unsigned int prop,
|
|
union extcon_property_value prop_val);
|
|
extern int extcon_set_property_capability(struct extcon_dev *edev,
|
|
unsigned int id, unsigned int prop);
|
|
|
|
#else /* CONFIG_EXTCON */
|
|
static inline int extcon_dev_register(struct extcon_dev *edev)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline void extcon_dev_unregister(struct extcon_dev *edev) { }
|
|
|
|
static inline int devm_extcon_dev_register(struct device *dev,
|
|
struct extcon_dev *edev)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
|
|
static inline void devm_extcon_dev_unregister(struct device *dev,
|
|
struct extcon_dev *edev) { }
|
|
|
|
static inline struct extcon_dev *extcon_dev_allocate(const unsigned int *cable)
|
|
{
|
|
return ERR_PTR(-ENOSYS);
|
|
}
|
|
|
|
static inline void extcon_dev_free(struct extcon_dev *edev) { }
|
|
|
|
static inline struct extcon_dev *devm_extcon_dev_allocate(struct device *dev,
|
|
const unsigned int *cable)
|
|
{
|
|
return ERR_PTR(-ENOSYS);
|
|
}
|
|
|
|
static inline void devm_extcon_dev_free(struct extcon_dev *edev) { }
|
|
|
|
|
|
static inline int extcon_set_state(struct extcon_dev *edev, unsigned int id,
|
|
bool state)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int extcon_set_state_sync(struct extcon_dev *edev, unsigned int id,
|
|
bool state)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int extcon_sync(struct extcon_dev *edev, unsigned int id)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int extcon_set_property(struct extcon_dev *edev, unsigned int id,
|
|
unsigned int prop,
|
|
union extcon_property_value prop_val)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int extcon_set_property_sync(struct extcon_dev *edev,
|
|
unsigned int id, unsigned int prop,
|
|
union extcon_property_value prop_val)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int extcon_set_property_capability(struct extcon_dev *edev,
|
|
unsigned int id, unsigned int prop)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif /* CONFIG_EXTCON */
|
|
#endif /* __LINUX_EXTCON_PROVIDER_H__ */
|