extcon: Move defintion of struct extcon_dev to driver/extcon directory
authorChanwoo Choi <cw00.choi@samsung.com>
Mon, 26 Dec 2016 11:37:38 +0000 (20:37 +0900)
committerChanwoo Choi <cw00.choi@samsung.com>
Mon, 9 Jan 2017 01:04:11 +0000 (10:04 +0900)
This patch moves the 'struct extcon_dev' of extcon subsystem
to driver/extcon/extcon.h header file because the struct extcon_dev have to
be handled by extcon API to guarantee the consistency of strcut extcon_dev.
If external drivers are able to touch the struct extcon_dev directly, it might
cause the critical and unknown problem.

Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
drivers/extcon/devres.c
drivers/extcon/extcon.c
drivers/extcon/extcon.h [new file with mode: 0644]
include/linux/extcon.h

index e686acd..b40eb18 100644 (file)
@@ -14,7 +14,7 @@
  * GNU General Public License for more details.
  */
 
-#include <linux/extcon.h>
+#include "extcon.h"
 
 static int devm_extcon_dev_match(struct device *dev, void *res, void *data)
 {
index d0e3679..591582b 100644 (file)
 #include <linux/device.h>
 #include <linux/fs.h>
 #include <linux/err.h>
-#include <linux/extcon.h>
 #include <linux/of.h>
 #include <linux/slab.h>
 #include <linux/sysfs.h>
 
+#include "extcon.h"
+
 #define SUPPORTED_CABLE_MAX    32
 #define CABLE_NAME_MAX         30
 
diff --git a/drivers/extcon/extcon.h b/drivers/extcon/extcon.h
new file mode 100644 (file)
index 0000000..993ddcc
--- /dev/null
@@ -0,0 +1,62 @@
+#ifndef __LINUX_EXTCON_INTERNAL_H__
+#define __LINUX_EXTCON_INTERNAL_H__
+
+#include <linux/extcon.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:                        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;
+       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__ */
index 0020123..d57e524 100644 (file)
@@ -167,62 +167,7 @@ union extcon_property_value {
 };
 
 struct extcon_cable;
-
-/**
- * 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:                        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;
-       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;
-};
+struct extcon_dev;
 
 #if IS_ENABLED(CONFIG_EXTCON)