To create a baseline, I'll pick up the changes from the extcon repository and make them available in chromeos-4.4. Guenter On Fri, Jul 22, 2016 at 2:40 AM, Chris Zhong <zyw at rock-chips.com> wrote: > Hi Chanwoo Choi > > Thanks for your help, I am going to post V7 next week base on these latest > extcon patch. > > Regards > Chris Zhong > > > On 07/22/2016 05:29 PM, Chanwoo Choi wrote: >> >> Hi Chris, >> >> I'm sorry for late reply. I finished the first draft to support the extcon >> property. >> You can check the patches[1]. But, I need more time to test it. After >> tested it, >> I'll send the patches. >> >> [1] >> https://git.kernel.org/cgit/linux/kernel/git/chanwoo/extcon.git/log/?h=extcon-test >> >> Chanwoo Choi (4): >> extcon: Add the extcon_type to group each connector into five category >> extcon: Add the support for extcon property according to type of >> connector >> extcon: Rename the extcon_set/get_state() to maintain the function >> naming pattern >> extcon: Add the sync APIs to support the notification for extcon >> property >> >> Chris Zhong (1): >> extcon: Add EXTCON_DISP_DP and the property for USB Type-C >> >> Regards, >> Chanwoo Choi >> >> On 2016? 07? 21? 22:13, Chris Zhong wrote: >>> >>> Add EXTCON_DISP_DP for the Display external connector. For Type-C >>> connector the DisplayPort can work as an Alternate Mode(VESA DisplayPort >>> Alt Mode on USB Type-C Standard). The Type-C support both normal and >>> flipped orientation, so add a property to extcon. >>> >>> Signe-off-by: Chris Zhong <zyw at rock-chips.com> >>> >>> Signed-off-by: Chris Zhong <zyw at rock-chips.com> >>> --- >>> >>> Changes in v6: >>> - move the EXTCON_PROP_TYPEC_POLARITY to EXTCON_TYPE_USB in _supported >>> Series-changes: 5 >>> - support get property >>> >>> Changes in v5: None >>> Changes in v4: None >>> Changes in v3: None >>> Changes in v2: None >>> Changes in v1: None >>> >>> drivers/extcon/extcon.c | 26 ++++++++++++++++++++++++++ >>> include/linux/extcon.h | 13 +++++++++++++ >>> 2 files changed, 39 insertions(+) >>> >>> diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c >>> index a1117db..f79b510 100644 >>> --- a/drivers/extcon/extcon.c >>> +++ b/drivers/extcon/extcon.c >>> @@ -157,6 +157,11 @@ struct __extcon_info { >>> .id = EXTCON_DISP_VGA, >>> .name = "VGA", >>> }, >>> + [EXTCON_DISP_DP] = { >>> + .type = EXTCON_TYPE_DISP | EXTCON_TYPE_USB, >>> + .id = EXTCON_DISP_DP, >>> + .name = "DP", >>> + }, >>> /* Miscellaneous external connector */ >>> [EXTCON_DOCK] = { >>> @@ -270,6 +275,7 @@ static bool is_extcon_property_supported(unsigned int >>> id, >>> switch (prop) { >>> case EXTCON_PROP_USB_ID: >>> case EXTCON_PROP_USB_VBUS: >>> + case EXTCON_PROP_TYPEC_POLARITY: >>> return true; >>> default: >>> break; >>> @@ -547,6 +553,26 @@ int extcon_get_cable_property(struct extcon_dev >>> *edev, unsigned int id, >>> enum extcon_property prop, >>> union extcon_property_value *val) >>> { >>> + struct extcon_cable *cable; >>> + int index; >>> + >>> + if (!edev) >>> + return -EINVAL; >>> + >>> + /* Check the property whether is supported or not */ >>> + if (!is_extcon_property_supported(id, prop)) >>> + return -EINVAL; >>> + >>> + /* Find the cable index of external connector by using id */ >>> + index = find_cable_index_by_id(edev, id); >>> + if (index < 0) >>> + return index; >>> + >>> + /* Store the property value */ >>> + cable = &edev->cables[index]; >>> + >>> + val->intval = cable->propval[prop].intval; >>> + >>> return 0; >>> } >>> diff --git a/include/linux/extcon.h b/include/linux/extcon.h >>> index f6f0a8d..50ef87f 100644 >>> --- a/include/linux/extcon.h >>> +++ b/include/linux/extcon.h >>> @@ -77,6 +77,7 @@ enum extcon_type { >>> #define EXTCON_DISP_MHL 41 /* Mobile High-Definition >>> Link */ >>> #define EXTCON_DISP_DVI 42 /* Digital Visual >>> Interface */ >>> #define EXTCON_DISP_VGA 43 /* Video Graphics Array >>> */ >>> +#define EXTCON_DISP_DP 44 /* DisplayPort */ >>> /* Miscellaneous external connector */ >>> #define EXTCON_DOCK 60 >>> @@ -108,9 +109,13 @@ enum extcon_property { >>> * - EXTCON_PROP_USB_USB >>> * @type: integer (int value) >>> * @value: 0 (low) or 1 (high) >>> + * - EXTCON_PROP_TYPEC_POLARITY, >>> + * @type: integer (int value) >>> + * @value: 0 (normal) or 1 (flip) >>> */ >>> EXTCON_PROP_USB_ID = 0, >>> EXTCON_PROP_USB_VBUS, >>> + EXTCON_PROP_TYPEC_POLARITY, >>> /* Properties of EXTCON_TYPE_CHG. */ >>> /* Properties of EXTCON_TYPE_JACK. */ >>> @@ -225,6 +230,14 @@ extern int extcon_get_cable_state_(struct extcon_dev >>> *edev, unsigned int id); >>> extern int extcon_set_cable_state_(struct extcon_dev *edev, unsigned >>> int id, >>> bool cable_state); >>> +extern int extcon_get_cable_property(struct extcon_dev *edev, unsigned >>> int id, >>> + enum extcon_property prop, >>> + union extcon_property_value *val); >>> + >>> +extern int extcon_set_cable_property(struct extcon_dev *edev, unsigned >>> int id, >>> + enum extcon_property prop, >>> + union extcon_property_value val); >>> + >>> /* >>> * Following APIs are to monitor every action of a notifier. >>> * Registrar gets notified for every external port of a connection >>> device. >>> >> >> >> > >