| 
									
										
										
										
											2012-04-20 14:16:22 +09:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *  External connector (extcon) class driver | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (C) 2012 Samsung Electronics | 
					
						
							|  |  |  |  * Author: Donggeun Kim <dg77.kim@samsung.com> | 
					
						
							|  |  |  |  * Author: MyungJoo Ham <myungjoo.ham@samsung.com> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * based on switch class driver | 
					
						
							|  |  |  |  * Copyright (C) 2008 Google, Inc. | 
					
						
							|  |  |  |  * Author: Mike Lockwood <lockwood@android.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_H__
 | 
					
						
							|  |  |  | #define __LINUX_EXTCON_H__
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-08 18:39:41 +09:00
										 |  |  | #include <linux/device.h>
 | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:24 +09:00
										 |  |  | #include <linux/notifier.h>
 | 
					
						
							| 
									
										
										
										
											2012-11-08 18:39:41 +09:00
										 |  |  | #include <linux/sysfs.h>
 | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define SUPPORTED_CABLE_MAX	32
 | 
					
						
							|  |  |  | #define CABLE_NAME_MAX		30
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * The standard cable name is to help support general notifier | 
					
						
							| 
									
										
										
										
											2012-08-23 09:11:54 +09:00
										 |  |  |  * and notifiee device drivers to share the common names. | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  |  * Please use standard cable names unless your notifier device has | 
					
						
							|  |  |  |  * a very unique and abnormal cable or | 
					
						
							|  |  |  |  * the cable type is supposed to be used with only one unique | 
					
						
							| 
									
										
										
										
											2012-08-23 09:11:54 +09:00
										 |  |  |  * pair of notifier/notifiee devices. | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Please add any other "standard" cables used with extcon dev. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You may add a dot and number to specify version or specification | 
					
						
							|  |  |  |  * of the specific cable if it is required. (e.g., "Fast-charger.18" | 
					
						
							|  |  |  |  * and "Fast-charger.10" for 1.8A and 1.0A chargers) | 
					
						
							| 
									
										
										
										
											2012-08-23 09:11:54 +09:00
										 |  |  |  * However, the notifiee and notifier should be able to handle such | 
					
						
							|  |  |  |  * string and if the notifiee can negotiate the protocol or identify, | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  |  * you don't need such convention. This convention is helpful when | 
					
						
							|  |  |  |  * notifier can distinguish but notifiee cannot. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | enum extcon_cable_name { | 
					
						
							|  |  |  | 	EXTCON_USB = 0, | 
					
						
							|  |  |  | 	EXTCON_USB_HOST, | 
					
						
							|  |  |  | 	EXTCON_TA, /* Travel Adaptor */ | 
					
						
							|  |  |  | 	EXTCON_FAST_CHARGER, | 
					
						
							|  |  |  | 	EXTCON_SLOW_CHARGER, | 
					
						
							|  |  |  | 	EXTCON_CHARGE_DOWNSTREAM, /* Charging an external device */ | 
					
						
							|  |  |  | 	EXTCON_HDMI, | 
					
						
							|  |  |  | 	EXTCON_MHL, | 
					
						
							|  |  |  | 	EXTCON_DVI, | 
					
						
							|  |  |  | 	EXTCON_VGA, | 
					
						
							|  |  |  | 	EXTCON_DOCK, | 
					
						
							|  |  |  | 	EXTCON_LINE_IN, | 
					
						
							|  |  |  | 	EXTCON_LINE_OUT, | 
					
						
							|  |  |  | 	EXTCON_MIC_IN, | 
					
						
							|  |  |  | 	EXTCON_HEADPHONE_OUT, | 
					
						
							|  |  |  | 	EXTCON_SPDIF_IN, | 
					
						
							|  |  |  | 	EXTCON_SPDIF_OUT, | 
					
						
							|  |  |  | 	EXTCON_VIDEO_IN, | 
					
						
							|  |  |  | 	EXTCON_VIDEO_OUT, | 
					
						
							| 
									
										
										
										
											2012-05-02 10:38:51 +01:00
										 |  |  | 	EXTCON_MECHANICAL, | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2012-08-30 00:35:09 +05:30
										 |  |  | extern const char extcon_cable_name[][CABLE_NAME_MAX + 1]; | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct extcon_cable; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:22 +09:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * struct extcon_dev - An extcon device represents one external connector. | 
					
						
							| 
									
										
										
										
											2012-11-20 19:22:33 +09:00
										 |  |  |  * @name:	The name of this extcon device. Parent device name is used | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:22 +09:00
										 |  |  |  *		if NULL. | 
					
						
							| 
									
										
										
										
											2012-11-20 19:22:33 +09:00
										 |  |  |  * @supported_cable:	Array of supported cable names ending with NULL. | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  |  *			If supported_cable is NULL, cable name related APIs | 
					
						
							|  |  |  |  *			are disabled. | 
					
						
							| 
									
										
										
										
											2012-11-20 19:22:33 +09:00
										 |  |  |  * @mutually_exclusive:	Array of mutually exclusive set of cables that cannot | 
					
						
							| 
									
										
										
											
												Extcon: support mutually exclusive relation between cables.
There could be cables that t recannot be attaches simulatenously. Extcon
device drivers may express such information via mutually_exclusive in
struct extcon_dev.
For example, for an extcon device with 16 cables (bits 0 to 15 are
available), if mutually_exclusive = { 0x7, 0xC0, 0x81, 0 }, then, the
following attachments are prohibitted.
{0, 1}
{0, 2}
{1, 2}
{6, 7}
{0, 7}
and every attachment set that are superset of one of the above.
For the detail, please refer to linux/include/linux/extcon.h.
The concept is suggested by NeilBrown <neilb@suse.de>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V5:
- Updated sysfs format
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:26 +09:00
										 |  |  |  *			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. | 
					
						
							| 
									
										
										
										
											2012-11-20 19:22:33 +09:00
										 |  |  |  * @print_name:	An optional callback to override the method to print the | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:22 +09:00
										 |  |  |  *		name of the extcon device. | 
					
						
							| 
									
										
										
										
											2012-11-20 19:22:33 +09:00
										 |  |  |  * @print_state:	An optional callback to override the method to print the | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:22 +09:00
										 |  |  |  *		status of the extcon device. | 
					
						
							| 
									
										
										
										
											2012-11-20 19:22:33 +09:00
										 |  |  |  * @dev:	Device of this extcon. Do not provide at register-time. | 
					
						
							|  |  |  |  * @state:	Attach/detach state of this extcon. Do not provide at | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:22 +09:00
										 |  |  |  *		register-time | 
					
						
							| 
									
										
										
										
											2012-11-20 19:22:33 +09:00
										 |  |  |  * @nh:	Notifier for the state change events from this extcon | 
					
						
							|  |  |  |  * @entry:	To support list of extcon devices so that users can search | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:24 +09:00
										 |  |  |  *		for extcon devices based on the extcon name. | 
					
						
							| 
									
										
										
										
											2012-11-20 19:22:33 +09:00
										 |  |  |  * @lock: | 
					
						
							|  |  |  |  * @max_supported:	Internal value to store the number of cables. | 
					
						
							|  |  |  |  * @extcon_dev_type:	Device_type struct to provide attribute_groups | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  |  *			customized for each extcon device. | 
					
						
							| 
									
										
										
										
											2012-11-20 19:22:33 +09:00
										 |  |  |  * @cables:	Sysfs subdirectories. Each represents one cable. | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:22 +09:00
										 |  |  |  * | 
					
						
							|  |  |  |  * 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; | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  | 	const char **supported_cable; | 
					
						
							| 
									
										
										
											
												Extcon: support mutually exclusive relation between cables.
There could be cables that t recannot be attaches simulatenously. Extcon
device drivers may express such information via mutually_exclusive in
struct extcon_dev.
For example, for an extcon device with 16 cables (bits 0 to 15 are
available), if mutually_exclusive = { 0x7, 0xC0, 0x81, 0 }, then, the
following attachments are prohibitted.
{0, 1}
{0, 2}
{1, 2}
{6, 7}
{0, 7}
and every attachment set that are superset of one of the above.
For the detail, please refer to linux/include/linux/extcon.h.
The concept is suggested by NeilBrown <neilb@suse.de>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V5:
- Updated sysfs format
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:26 +09:00
										 |  |  | 	const u32	*mutually_exclusive; | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:22 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* --- Optional callbacks to override class functions --- */ | 
					
						
							|  |  |  | 	ssize_t	(*print_name)(struct extcon_dev *edev, char *buf); | 
					
						
							|  |  |  | 	ssize_t	(*print_state)(struct extcon_dev *edev, char *buf); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* --- Internal data. Please do not set. --- */ | 
					
						
							|  |  |  | 	struct device	*dev; | 
					
						
							|  |  |  | 	u32		state; | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:24 +09:00
										 |  |  | 	struct raw_notifier_head nh; | 
					
						
							|  |  |  | 	struct list_head entry; | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  | 	spinlock_t lock; /* could be called by irq handler */ | 
					
						
							|  |  |  | 	int max_supported; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* /sys/class/extcon/.../cable.n/... */ | 
					
						
							|  |  |  | 	struct device_type extcon_dev_type; | 
					
						
							|  |  |  | 	struct extcon_cable *cables; | 
					
						
							| 
									
										
										
											
												Extcon: support mutually exclusive relation between cables.
There could be cables that t recannot be attaches simulatenously. Extcon
device drivers may express such information via mutually_exclusive in
struct extcon_dev.
For example, for an extcon device with 16 cables (bits 0 to 15 are
available), if mutually_exclusive = { 0x7, 0xC0, 0x81, 0 }, then, the
following attachments are prohibitted.
{0, 1}
{0, 2}
{1, 2}
{6, 7}
{0, 7}
and every attachment set that are superset of one of the above.
For the detail, please refer to linux/include/linux/extcon.h.
The concept is suggested by NeilBrown <neilb@suse.de>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V5:
- Updated sysfs format
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:26 +09:00
										 |  |  | 	/* /sys/class/extcon/.../mutually_exclusive/... */ | 
					
						
							|  |  |  | 	struct attribute_group attr_g_muex; | 
					
						
							|  |  |  | 	struct attribute **attrs_muex; | 
					
						
							|  |  |  | 	struct device_attribute *d_attrs_muex; | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * struct extcon_cable	- An internal data for each cable of extcon device. | 
					
						
							| 
									
										
										
										
											2012-11-20 19:22:33 +09:00
										 |  |  |  * @edev:	The extcon device | 
					
						
							|  |  |  |  * @cable_index:	Index of this cable in the edev | 
					
						
							|  |  |  |  * @attr_g:	Attribute group for the cable | 
					
						
							|  |  |  |  * @attr_name:	"name" sysfs entry | 
					
						
							|  |  |  |  * @attr_state:	"state" sysfs entry | 
					
						
							|  |  |  |  * @attrs:	Array pointing to attr_name and attr_state for attr_g | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  |  */ | 
					
						
							|  |  |  | struct extcon_cable { | 
					
						
							|  |  |  | 	struct extcon_dev *edev; | 
					
						
							|  |  |  | 	int cable_index; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct attribute_group attr_g; | 
					
						
							|  |  |  | 	struct device_attribute attr_name; | 
					
						
							|  |  |  | 	struct device_attribute attr_state; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct attribute *attrs[3]; /* to be fed to attr_g.attrs */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * struct extcon_specific_cable_nb - An internal data for | 
					
						
							|  |  |  |  *				extcon_register_interest(). | 
					
						
							| 
									
										
										
										
											2012-11-20 19:22:33 +09:00
										 |  |  |  * @internal_nb:	a notifier block bridging extcon notifier and cable notifier. | 
					
						
							|  |  |  |  * @user_nb:	user provided notifier block for events from a specific cable. | 
					
						
							|  |  |  |  * @cable_index:	the target cable. | 
					
						
							|  |  |  |  * @edev:	the target extcon device. | 
					
						
							|  |  |  |  * @previous_value:	the saved previous event value. | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  |  */ | 
					
						
							|  |  |  | struct extcon_specific_cable_nb { | 
					
						
							|  |  |  | 	struct notifier_block internal_nb; | 
					
						
							|  |  |  | 	struct notifier_block *user_nb; | 
					
						
							|  |  |  | 	int cable_index; | 
					
						
							|  |  |  | 	struct extcon_dev *edev; | 
					
						
							|  |  |  | 	unsigned long previous_value; | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:22 +09:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if IS_ENABLED(CONFIG_EXTCON)
 | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:24 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Following APIs are for notifiers or configurations. | 
					
						
							|  |  |  |  * Notifiers are the external port and connection devices. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:22 +09:00
										 |  |  | extern int extcon_dev_register(struct extcon_dev *edev, struct device *dev); | 
					
						
							|  |  |  | extern void extcon_dev_unregister(struct extcon_dev *edev); | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:24 +09:00
										 |  |  | extern struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name); | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:22 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * get/set/update_state access the 32b encoded state value, which represents | 
					
						
							|  |  |  |  * states of all possible cables of the multistate port. For example, if one | 
					
						
							|  |  |  |  * calls extcon_set_state(edev, 0x7), it may mean that all the three cables | 
					
						
							|  |  |  |  * are attached to the port. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:22 +09:00
										 |  |  | static inline u32 extcon_get_state(struct extcon_dev *edev) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return edev->state; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												Extcon: support mutually exclusive relation between cables.
There could be cables that t recannot be attaches simulatenously. Extcon
device drivers may express such information via mutually_exclusive in
struct extcon_dev.
For example, for an extcon device with 16 cables (bits 0 to 15 are
available), if mutually_exclusive = { 0x7, 0xC0, 0x81, 0 }, then, the
following attachments are prohibitted.
{0, 1}
{0, 2}
{1, 2}
{6, 7}
{0, 7}
and every attachment set that are superset of one of the above.
For the detail, please refer to linux/include/linux/extcon.h.
The concept is suggested by NeilBrown <neilb@suse.de>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V5:
- Updated sysfs format
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:26 +09:00
										 |  |  | extern int extcon_set_state(struct extcon_dev *edev, u32 state); | 
					
						
							|  |  |  | extern int extcon_update_state(struct extcon_dev *edev, u32 mask, u32 state); | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * get/set_cable_state access each bit of the 32b encoded state value. | 
					
						
							|  |  |  |  * They are used to access the status of each cable based on the cable_name | 
					
						
							| 
									
										
										
										
											2012-08-23 09:11:54 +09:00
										 |  |  |  * or cable_index, which is retrieved by extcon_find_cable_index | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  |  */ | 
					
						
							|  |  |  | extern int extcon_find_cable_index(struct extcon_dev *sdev, | 
					
						
							|  |  |  | 				   const char *cable_name); | 
					
						
							|  |  |  | extern int extcon_get_cable_state_(struct extcon_dev *edev, int cable_index); | 
					
						
							|  |  |  | extern int extcon_set_cable_state_(struct extcon_dev *edev, int cable_index, | 
					
						
							|  |  |  | 				   bool cable_state); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern int extcon_get_cable_state(struct extcon_dev *edev, | 
					
						
							|  |  |  | 				  const char *cable_name); | 
					
						
							|  |  |  | extern int extcon_set_cable_state(struct extcon_dev *edev, | 
					
						
							|  |  |  | 				  const char *cable_name, bool cable_state); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Following APIs are for notifiees (those who want to be notified) | 
					
						
							|  |  |  |  * to register a callback for events from a specific cable of the extcon. | 
					
						
							|  |  |  |  * Notifiees are the connected device drivers wanting to get notified by | 
					
						
							|  |  |  |  * a specific external port of a connection device. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | extern int extcon_register_interest(struct extcon_specific_cable_nb *obj, | 
					
						
							|  |  |  | 				    const char *extcon_name, | 
					
						
							|  |  |  | 				    const char *cable_name, | 
					
						
							|  |  |  | 				    struct notifier_block *nb); | 
					
						
							|  |  |  | extern int extcon_unregister_interest(struct extcon_specific_cable_nb *nb); | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:24 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Following APIs are to monitor every action of a notifier. | 
					
						
							| 
									
										
										
										
											2012-08-23 09:11:54 +09:00
										 |  |  |  * Registrar gets notified for every external port of a connection device. | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  |  * Probably this could be used to debug an action of notifier; however, | 
					
						
							| 
									
										
										
										
											2012-08-23 09:11:54 +09:00
										 |  |  |  * we do not recommend to use this for normal 'notifiee' device drivers who | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  |  * want to be notified by a specific external port of the notifier. | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:24 +09:00
										 |  |  |  */ | 
					
						
							|  |  |  | extern int extcon_register_notifier(struct extcon_dev *edev, | 
					
						
							|  |  |  | 				    struct notifier_block *nb); | 
					
						
							|  |  |  | extern int extcon_unregister_notifier(struct extcon_dev *edev, | 
					
						
							|  |  |  | 				      struct notifier_block *nb); | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:22 +09:00
										 |  |  | #else /* CONFIG_EXTCON */
 | 
					
						
							|  |  |  | static inline int extcon_dev_register(struct extcon_dev *edev, | 
					
						
							|  |  |  | 				      struct device *dev) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void extcon_dev_unregister(struct extcon_dev *edev) { } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline u32 extcon_get_state(struct extcon_dev *edev) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												Extcon: support mutually exclusive relation between cables.
There could be cables that t recannot be attaches simulatenously. Extcon
device drivers may express such information via mutually_exclusive in
struct extcon_dev.
For example, for an extcon device with 16 cables (bits 0 to 15 are
available), if mutually_exclusive = { 0x7, 0xC0, 0x81, 0 }, then, the
following attachments are prohibitted.
{0, 1}
{0, 2}
{1, 2}
{6, 7}
{0, 7}
and every attachment set that are superset of one of the above.
For the detail, please refer to linux/include/linux/extcon.h.
The concept is suggested by NeilBrown <neilb@suse.de>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V5:
- Updated sysfs format
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:26 +09:00
										 |  |  | static inline int extcon_set_state(struct extcon_dev *edev, u32 state) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
											
												Extcon: support mutually exclusive relation between cables.
There could be cables that t recannot be attaches simulatenously. Extcon
device drivers may express such information via mutually_exclusive in
struct extcon_dev.
For example, for an extcon device with 16 cables (bits 0 to 15 are
available), if mutually_exclusive = { 0x7, 0xC0, 0x81, 0 }, then, the
following attachments are prohibitted.
{0, 1}
{0, 2}
{1, 2}
{6, 7}
{0, 7}
and every attachment set that are superset of one of the above.
For the detail, please refer to linux/include/linux/extcon.h.
The concept is suggested by NeilBrown <neilb@suse.de>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V5:
- Updated sysfs format
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:26 +09:00
										 |  |  | static inline int extcon_update_state(struct extcon_dev *edev, u32 mask, | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  | 				       u32 state) | 
					
						
							| 
									
										
										
											
												Extcon: support mutually exclusive relation between cables.
There could be cables that t recannot be attaches simulatenously. Extcon
device drivers may express such information via mutually_exclusive in
struct extcon_dev.
For example, for an extcon device with 16 cables (bits 0 to 15 are
available), if mutually_exclusive = { 0x7, 0xC0, 0x81, 0 }, then, the
following attachments are prohibitted.
{0, 1}
{0, 2}
{1, 2}
{6, 7}
{0, 7}
and every attachment set that are superset of one of the above.
For the detail, please refer to linux/include/linux/extcon.h.
The concept is suggested by NeilBrown <neilb@suse.de>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V5:
- Updated sysfs format
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:26 +09:00
										 |  |  | { | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | static inline int extcon_find_cable_index(struct extcon_dev *edev, | 
					
						
							|  |  |  | 					  const char *cable_name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int extcon_get_cable_state_(struct extcon_dev *edev, | 
					
						
							|  |  |  | 					  int cable_index) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int extcon_set_cable_state_(struct extcon_dev *edev, | 
					
						
							|  |  |  | 					  int cable_index, bool cable_state) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int extcon_get_cable_state(struct extcon_dev *edev, | 
					
						
							|  |  |  | 			const char *cable_name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int extcon_set_cable_state(struct extcon_dev *edev, | 
					
						
							|  |  |  | 			const char *cable_name, int state) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:24 +09:00
										 |  |  | static inline struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return NULL; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int extcon_register_notifier(struct extcon_dev *edev, | 
					
						
							|  |  |  | 					   struct notifier_block *nb) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int extcon_unregister_notifier(struct extcon_dev *edev, | 
					
						
							|  |  |  | 					     struct notifier_block *nb) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Extcon: support multiple states at a device.
One switch device (e.g., MUIC(MAX8997, MAX77686, ...), and some 30-pin
devices) may have multiple cables attached. For example, one
30-pin port may inhabit a USB cable, an HDMI cable, and a mic.
Thus, one switch device requires multiple state bits each representing
a type of cable.
For such purpose, we use the 32bit state variable; thus, up to 32
different type of cables may be defined for a switch device. The list of
possible cables is defined by the array of cable names in the switch_dev
struct given to the class.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
Changes from V7
- Bugfixed in _call_per_cable() (incorrect nb) (Chanwoo Choi)
- Compiler error in header for !CONFIG_EXTCON (Chanwoo Choi)
Changes from V5
- Sysfs style reformed: subdirectory per cable.
- Updated standard cable names
- Removed unnecessary printf
- Bugfixes after testing
Changes from V4
- Bugfixes after more testing at Exynos4412 boards with userspace
  processses.
Changes from V3
- Bugfixes after more testing at Exynos4412 boards.
Changes from V2
- State can be stored by user
- Documentation updated
Changes from RFC
- Switch is renamed to extcon
- Added kerneldoc comments
- Added APIs to support "standard" cable names
- Added helper APIs to support notifier block registration with cable
  name.
- Regrouped function list in the header file.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
											
										 
											2012-04-20 14:16:25 +09:00
										 |  |  | static inline int extcon_register_interest(struct extcon_specific_cable_nb *obj, | 
					
						
							|  |  |  | 					   const char *extcon_name, | 
					
						
							|  |  |  | 					   const char *cable_name, | 
					
						
							|  |  |  | 					   struct notifier_block *nb) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int extcon_unregister_interest(struct extcon_specific_cable_nb | 
					
						
							|  |  |  | 						    *obj) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-04-20 14:16:22 +09:00
										 |  |  | #endif /* CONFIG_EXTCON */
 | 
					
						
							|  |  |  | #endif /* __LINUX_EXTCON_H__ */
 |