forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.5 KiB
66 lines
2.5 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
#ifndef __LINUX_EXTCON_INTERNAL_H__ |
|
#define __LINUX_EXTCON_INTERNAL_H__ |
|
|
|
#include <linux/extcon-provider.h> |
|
|
|
/** |
|
* struct extcon_dev - An extcon device represents one external connector. |
|
* @name: The name of this extcon device. Parent device name is |
|
* used if NULL. |
|
* @supported_cable: Array of supported cable names ending with EXTCON_NONE. |
|
* If supported_cable is NULL, cable name related APIs |
|
* are disabled. |
|
* @mutually_exclusive: Array of mutually exclusive set of cables that cannot |
|
* be attached simultaneously. The array should be |
|
* ending with NULL or be NULL (no mutually exclusive |
|
* cables). For example, if it is { 0x7, 0x30, 0}, then, |
|
* {0, 1}, {0, 1, 2}, {0, 2}, {1, 2}, or {4, 5} cannot |
|
* be attached simulataneously. {0x7, 0} is equivalent to |
|
* {0x3, 0x6, 0x5, 0}. If it is {0xFFFFFFFF, 0}, there |
|
* can be no simultaneous connections. |
|
* @dev: Device of this extcon. |
|
* @state: Attach/detach state of this extcon. Do not provide at |
|
* register-time. |
|
* @nh_all: Notifier for the state change events for all supported |
|
* external connectors from this extcon. |
|
* @nh: Notifier for the state change events from this extcon |
|
* @entry: To support list of extcon devices so that users can |
|
* search for extcon devices based on the extcon name. |
|
* @lock: |
|
* @max_supported: Internal value to store the number of cables. |
|
* @extcon_dev_type: Device_type struct to provide attribute_groups |
|
* customized for each extcon device. |
|
* @cables: Sysfs subdirectories. Each represents one cable. |
|
* |
|
* In most cases, users only need to provide "User initializing data" of |
|
* this struct when registering an extcon. In some exceptional cases, |
|
* optional callbacks may be needed. However, the values in "internal data" |
|
* are overwritten by register function. |
|
*/ |
|
struct extcon_dev { |
|
/* Optional user initializing data */ |
|
const char *name; |
|
const unsigned int *supported_cable; |
|
const u32 *mutually_exclusive; |
|
|
|
/* Internal data. Please do not set. */ |
|
struct device dev; |
|
struct raw_notifier_head nh_all; |
|
struct raw_notifier_head *nh; |
|
struct list_head entry; |
|
int max_supported; |
|
spinlock_t lock; /* could be called by irq handler */ |
|
u32 state; |
|
|
|
/* /sys/class/extcon/.../cable.n/... */ |
|
struct device_type extcon_dev_type; |
|
struct extcon_cable *cables; |
|
|
|
/* /sys/class/extcon/.../mutually_exclusive/... */ |
|
struct attribute_group attr_g_muex; |
|
struct attribute **attrs_muex; |
|
struct device_attribute *d_attrs_muex; |
|
}; |
|
|
|
#endif /* __LINUX_EXTCON_INTERNAL_H__ */
|
|
|