From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-eopbgr10067.outbound.protection.outlook.com ([40.107.1.67]:11698 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751745AbeECAlP (ORCPT ); Wed, 2 May 2018 20:41:15 -0400 From: Li Jun Subject: [PATCH v5 01/14] dt-bindings: connector: add properties for typec Date: Thu, 3 May 2018 08:24:41 +0800 Message-Id: <1525307094-27402-2-git-send-email-jun.li@nxp.com> In-Reply-To: <1525307094-27402-1-git-send-email-jun.li@nxp.com> References: <1525307094-27402-1-git-send-email-jun.li@nxp.com> MIME-Version: 1.0 Content-Type: text/plain Sender: devicetree-owner@vger.kernel.org To: robh+dt@kernel.org, gregkh@linuxfoundation.org, heikki.krogerus@linux.intel.com, linux@roeck-us.net Cc: jun.li@nxp.com, a.hajda@samsung.com, cw00.choi@samsung.com, shufan_lee@richtek.com, peter.chen@nxp.com, gsomlo@gmail.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-imx@nxp.com List-ID: Add bingdings supported by current typec driver, so user can pass all those properties via dt. Signed-off-by: Li Jun --- .../bindings/connector/usb-connector.txt | 44 +++++++++++++++ include/dt-bindings/usb/pd.h | 62 ++++++++++++++++++++++ 2 files changed, 106 insertions(+) diff --git a/Documentation/devicetree/bindings/connector/usb-connector.txt b/Documentation/devicetree/bindings/connector/usb-connector.txt index e1463f1..4b19de6d0 100644 --- a/Documentation/devicetree/bindings/connector/usb-connector.txt +++ b/Documentation/devicetree/bindings/connector/usb-connector.txt @@ -15,6 +15,33 @@ Optional properties: - type: size of the connector, should be specified in case of USB-A, USB-B non-fullsize connectors: "mini", "micro". +Optional properties for usb-c-connector: +- power-role: should be one of "source", "sink" or "dual"(DRP) if typec + connector has power support. +- try-power-role: preferred power role if "dual"(DRP) can support Try.SNK + or Try.SRC, should be "sink" for Try.SNK or "source" for Try.SRC. +- data-role: should be one of "host", "device", "dual"(DRD) if typec + connector supports USB data. + +Required properties for usb-c-connector with power delivery support: +- source-pdos: An array of u32 with each entry providing supported power + source data object(PDO), the detailed bit definitions of PDO can be found + in "Universal Serial Bus Power Delivery Specification" chapter 6.4.1.2 + Source_Capabilities Message, the order of each entry(PDO) should follow + the PD spec chapter 6.4.1. Required for power source and power dual role. + User can specify the source PDO array via PDO_FIXED/BATT/VAR() defined in + dt-bindings/usb/pd.h. +- sink-pdos: An array of u32 with each entry providing supported power + sink data object(PDO), the detailed bit definitions of PDO can be found + in "Universal Serial Bus Power Delivery Specification" chapter 6.4.1.3 + Sink Capabilities Message, the order of each entry(PDO) should follow + the PD spec chapter 6.4.1. Required for power sink and power dual role. + User can specify the sink PDO array via PDO_FIXED/BATT/VAR() defined in + dt-bindings/usb/pd.h. +- op-sink-microwatt: Sink required operating power in microwatt, if source + can't offer the power, Capability Mismatch is set, required for power + sink and power dual role. + Required nodes: - any data bus to the connector should be modeled using the OF graph bindings specified in bindings/graph.txt, unless the bus is between parent node and @@ -73,3 +100,20 @@ ccic: s2mm005@33 { }; }; }; + +3. USB-C connector attached to a typec port controller(ptn5110), which has +power delivery support and enables drp. + +typec: ptn5110@50 { + ... + usb_con: connector { + compatible = "usb-c-connector"; + label = "USB-C"; + power-role = "dual"; + try-power-role = "sink"; + source-pdos = ; + sink-pdos = ; + op-sink-microwatt = <10000000>; + }; +}; diff --git a/include/dt-bindings/usb/pd.h b/include/dt-bindings/usb/pd.h new file mode 100644 index 0000000..7b7a92f --- /dev/null +++ b/include/dt-bindings/usb/pd.h @@ -0,0 +1,62 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __DT_POWER_DELIVERY_H +#define __DT_POWER_DELIVERY_H + +/* Power delivery Power Data Object definitions */ +#define PDO_TYPE_FIXED 0 +#define PDO_TYPE_BATT 1 +#define PDO_TYPE_VAR 2 +#define PDO_TYPE_APDO 3 + +#define PDO_TYPE_SHIFT 30 +#define PDO_TYPE_MASK 0x3 + +#define PDO_TYPE(t) ((t) << PDO_TYPE_SHIFT) + +#define PDO_VOLT_MASK 0x3ff +#define PDO_CURR_MASK 0x3ff +#define PDO_PWR_MASK 0x3ff + +#define PDO_FIXED_DUAL_ROLE (1 << 29) /* Power role swap supported */ +#define PDO_FIXED_SUSPEND (1 << 28) /* USB Suspend supported (Source) */ +#define PDO_FIXED_HIGHER_CAP (1 << 28) /* Requires more than vSafe5V (Sink) */ +#define PDO_FIXED_EXTPOWER (1 << 27) /* Externally powered */ +#define PDO_FIXED_USB_COMM (1 << 26) /* USB communications capable */ +#define PDO_FIXED_DATA_SWAP (1 << 25) /* Data role swap supported */ +#define PDO_FIXED_VOLT_SHIFT 10 /* 50mV units */ +#define PDO_FIXED_CURR_SHIFT 0 /* 10mA units */ + +#define PDO_FIXED_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_FIXED_VOLT_SHIFT) +#define PDO_FIXED_CURR(ma) ((((ma) / 10) & PDO_CURR_MASK) << PDO_FIXED_CURR_SHIFT) + +#define PDO_FIXED(mv, ma, flags) \ + (PDO_TYPE(PDO_TYPE_FIXED) | (flags) | \ + PDO_FIXED_VOLT(mv) | PDO_FIXED_CURR(ma)) + +#define VSAFE5V 5000 /* mv units */ + +#define PDO_BATT_MAX_VOLT_SHIFT 20 /* 50mV units */ +#define PDO_BATT_MIN_VOLT_SHIFT 10 /* 50mV units */ +#define PDO_BATT_MAX_PWR_SHIFT 0 /* 250mW units */ + +#define PDO_BATT_MIN_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_BATT_MIN_VOLT_SHIFT) +#define PDO_BATT_MAX_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_BATT_MAX_VOLT_SHIFT) +#define PDO_BATT_MAX_POWER(mw) ((((mw) / 250) & PDO_PWR_MASK) << PDO_BATT_MAX_PWR_SHIFT) + +#define PDO_BATT(min_mv, max_mv, max_mw) \ + (PDO_TYPE(PDO_TYPE_BATT) | PDO_BATT_MIN_VOLT(min_mv) | \ + PDO_BATT_MAX_VOLT(max_mv) | PDO_BATT_MAX_POWER(max_mw)) + +#define PDO_VAR_MAX_VOLT_SHIFT 20 /* 50mV units */ +#define PDO_VAR_MIN_VOLT_SHIFT 10 /* 50mV units */ +#define PDO_VAR_MAX_CURR_SHIFT 0 /* 10mA units */ + +#define PDO_VAR_MIN_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_VAR_MIN_VOLT_SHIFT) +#define PDO_VAR_MAX_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_VAR_MAX_VOLT_SHIFT) +#define PDO_VAR_MAX_CURR(ma) ((((ma) / 10) & PDO_CURR_MASK) << PDO_VAR_MAX_CURR_SHIFT) + +#define PDO_VAR(min_mv, max_mv, max_ma) \ + (PDO_TYPE(PDO_TYPE_VAR) | PDO_VAR_MIN_VOLT(min_mv) | \ + PDO_VAR_MAX_VOLT(max_mv) | PDO_VAR_MAX_CURR(max_ma)) + + #endif /* __DT_POWER_DELIVERY_H */ -- 2.7.4 From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v5,01/14] dt-bindings: connector: add properties for typec From: Jun Li Message-Id: <1525307094-27402-2-git-send-email-jun.li@nxp.com> Date: Thu, 3 May 2018 08:24:41 +0800 To: robh+dt@kernel.org, gregkh@linuxfoundation.org, heikki.krogerus@linux.intel.com, linux@roeck-us.net Cc: jun.li@nxp.com, a.hajda@samsung.com, cw00.choi@samsung.com, shufan_lee@richtek.com, peter.chen@nxp.com, gsomlo@gmail.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-imx@nxp.com List-ID: QWRkIGJpbmdkaW5ncyBzdXBwb3J0ZWQgYnkgY3VycmVudCB0eXBlYyBkcml2ZXIsIHNvIHVzZXIg Y2FuIHBhc3MKYWxsIHRob3NlIHByb3BlcnRpZXMgdmlhIGR0LgoKU2lnbmVkLW9mZi1ieTogTGkg SnVuIDxqdW4ubGlAbnhwLmNvbT4KLS0tCiAuLi4vYmluZGluZ3MvY29ubmVjdG9yL3VzYi1jb25u ZWN0b3IudHh0ICAgICAgICAgICB8IDQ0ICsrKysrKysrKysrKysrKwogaW5jbHVkZS9kdC1iaW5k aW5ncy91c2IvcGQuaCAgICAgICAgICAgICAgICAgICAgICAgfCA2MiArKysrKysrKysrKysrKysr KysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDEwNiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEv RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nvbm5lY3Rvci91c2ItY29ubmVjdG9y LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jb25uZWN0b3IvdXNiLWNv bm5lY3Rvci50eHQKaW5kZXggZTE0NjNmMS4uNGIxOWRlNmQwIDEwMDY0NAotLS0gYS9Eb2N1bWVu dGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY29ubmVjdG9yL3VzYi1jb25uZWN0b3IudHh0Cisr KyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jb25uZWN0b3IvdXNiLWNvbm5l Y3Rvci50eHQKQEAgLTE1LDYgKzE1LDMzIEBAIE9wdGlvbmFsIHByb3BlcnRpZXM6CiAtIHR5cGU6 IHNpemUgb2YgdGhlIGNvbm5lY3Rvciwgc2hvdWxkIGJlIHNwZWNpZmllZCBpbiBjYXNlIG9mIFVT Qi1BLCBVU0ItQgogICBub24tZnVsbHNpemUgY29ubmVjdG9yczogIm1pbmkiLCAibWljcm8iLgog CitPcHRpb25hbCBwcm9wZXJ0aWVzIGZvciB1c2ItYy1jb25uZWN0b3I6CistIHBvd2VyLXJvbGU6 IHNob3VsZCBiZSBvbmUgb2YgInNvdXJjZSIsICJzaW5rIiBvciAiZHVhbCIoRFJQKSBpZiB0eXBl YworICBjb25uZWN0b3IgaGFzIHBvd2VyIHN1cHBvcnQuCistIHRyeS1wb3dlci1yb2xlOiBwcmVm ZXJyZWQgcG93ZXIgcm9sZSBpZiAiZHVhbCIoRFJQKSBjYW4gc3VwcG9ydCBUcnkuU05LCisgIG9y IFRyeS5TUkMsIHNob3VsZCBiZSAic2luayIgZm9yIFRyeS5TTksgb3IgInNvdXJjZSIgZm9yIFRy eS5TUkMuCistIGRhdGEtcm9sZTogc2hvdWxkIGJlIG9uZSBvZiAiaG9zdCIsICJkZXZpY2UiLCAi ZHVhbCIoRFJEKSBpZiB0eXBlYworICBjb25uZWN0b3Igc3VwcG9ydHMgVVNCIGRhdGEuCisKK1Jl cXVpcmVkIHByb3BlcnRpZXMgZm9yIHVzYi1jLWNvbm5lY3RvciB3aXRoIHBvd2VyIGRlbGl2ZXJ5 IHN1cHBvcnQ6CistIHNvdXJjZS1wZG9zOiBBbiBhcnJheSBvZiB1MzIgd2l0aCBlYWNoIGVudHJ5 IHByb3ZpZGluZyBzdXBwb3J0ZWQgcG93ZXIKKyAgc291cmNlIGRhdGEgb2JqZWN0KFBETyksIHRo ZSBkZXRhaWxlZCBiaXQgZGVmaW5pdGlvbnMgb2YgUERPIGNhbiBiZSBmb3VuZAorICBpbiAiVW5p dmVyc2FsIFNlcmlhbCBCdXMgUG93ZXIgRGVsaXZlcnkgU3BlY2lmaWNhdGlvbiIgY2hhcHRlciA2 LjQuMS4yCisgIFNvdXJjZV9DYXBhYmlsaXRpZXMgTWVzc2FnZSwgdGhlIG9yZGVyIG9mIGVhY2gg ZW50cnkoUERPKSBzaG91bGQgZm9sbG93CisgIHRoZSBQRCBzcGVjIGNoYXB0ZXIgNi40LjEuIFJl cXVpcmVkIGZvciBwb3dlciBzb3VyY2UgYW5kIHBvd2VyIGR1YWwgcm9sZS4KKyAgVXNlciBjYW4g c3BlY2lmeSB0aGUgc291cmNlIFBETyBhcnJheSB2aWEgUERPX0ZJWEVEL0JBVFQvVkFSKCkgZGVm aW5lZCBpbgorICBkdC1iaW5kaW5ncy91c2IvcGQuaC4KKy0gc2luay1wZG9zOiBBbiBhcnJheSBv ZiB1MzIgd2l0aCBlYWNoIGVudHJ5IHByb3ZpZGluZyBzdXBwb3J0ZWQgcG93ZXIKKyAgc2luayBk YXRhIG9iamVjdChQRE8pLCB0aGUgZGV0YWlsZWQgYml0IGRlZmluaXRpb25zIG9mIFBETyBjYW4g YmUgZm91bmQKKyAgaW4gIlVuaXZlcnNhbCBTZXJpYWwgQnVzIFBvd2VyIERlbGl2ZXJ5IFNwZWNp ZmljYXRpb24iIGNoYXB0ZXIgNi40LjEuMworICBTaW5rIENhcGFiaWxpdGllcyBNZXNzYWdlLCB0 aGUgb3JkZXIgb2YgZWFjaCBlbnRyeShQRE8pIHNob3VsZCBmb2xsb3cKKyAgdGhlIFBEIHNwZWMg Y2hhcHRlciA2LjQuMS4gUmVxdWlyZWQgZm9yIHBvd2VyIHNpbmsgYW5kIHBvd2VyIGR1YWwgcm9s ZS4KKyAgVXNlciBjYW4gc3BlY2lmeSB0aGUgc2luayBQRE8gYXJyYXkgdmlhIFBET19GSVhFRC9C QVRUL1ZBUigpIGRlZmluZWQgaW4KKyAgZHQtYmluZGluZ3MvdXNiL3BkLmguCistIG9wLXNpbmst bWljcm93YXR0OiBTaW5rIHJlcXVpcmVkIG9wZXJhdGluZyBwb3dlciBpbiBtaWNyb3dhdHQsIGlm IHNvdXJjZQorICBjYW4ndCBvZmZlciB0aGUgcG93ZXIsIENhcGFiaWxpdHkgTWlzbWF0Y2ggaXMg c2V0LCByZXF1aXJlZCBmb3IgcG93ZXIKKyAgc2luayBhbmQgcG93ZXIgZHVhbCByb2xlLgorCiBS ZXF1aXJlZCBub2RlczoKIC0gYW55IGRhdGEgYnVzIHRvIHRoZSBjb25uZWN0b3Igc2hvdWxkIGJl IG1vZGVsZWQgdXNpbmcgdGhlIE9GIGdyYXBoIGJpbmRpbmdzCiAgIHNwZWNpZmllZCBpbiBiaW5k aW5ncy9ncmFwaC50eHQsIHVubGVzcyB0aGUgYnVzIGlzIGJldHdlZW4gcGFyZW50IG5vZGUgYW5k CkBAIC03MywzICsxMDAsMjAgQEAgY2NpYzogczJtbTAwNUAzMyB7CiAJCX07CiAJfTsKIH07CisK KzMuIFVTQi1DIGNvbm5lY3RvciBhdHRhY2hlZCB0byBhIHR5cGVjIHBvcnQgY29udHJvbGxlcihw dG41MTEwKSwgd2hpY2ggaGFzCitwb3dlciBkZWxpdmVyeSBzdXBwb3J0IGFuZCBlbmFibGVzIGRy cC4KKwordHlwZWM6IHB0bjUxMTBANTAgeworCS4uLgorCXVzYl9jb246IGNvbm5lY3RvciB7CisJ CWNvbXBhdGlibGUgPSAidXNiLWMtY29ubmVjdG9yIjsKKwkJbGFiZWwgPSAiVVNCLUMiOworCQlw b3dlci1yb2xlID0gImR1YWwiOworCQl0cnktcG93ZXItcm9sZSA9ICJzaW5rIjsKKwkJc291cmNl LXBkb3MgPSA8UERPX0ZJWEVEKDUwMDAsIDIwMDAsIFBET19GSVhFRF9VU0JfQ09NTSk+OworCQlz aW5rLXBkb3MgPSA8UERPX0ZJWEVEKDUwMDAsIDIwMDAsIFBET19GSVhFRF9VU0JfQ09NTSkKKwkJ CSAgICAgUERPX1ZBUig1MDAwLCAxMjAwMCwgMjAwMCk+OworCQlvcC1zaW5rLW1pY3Jvd2F0dCA9 IDwxMDAwMDAwMD47CisJfTsKK307CmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL3Vz Yi9wZC5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy91c2IvcGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi43YjdhOTJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1i aW5kaW5ncy91c2IvcGQuaApAQCAtMCwwICsxLDYyIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMCAqLworI2lmbmRlZiBfX0RUX1BPV0VSX0RFTElWRVJZX0gKKyNkZWZpbmUg X19EVF9QT1dFUl9ERUxJVkVSWV9ICisKKy8qIFBvd2VyIGRlbGl2ZXJ5IFBvd2VyIERhdGEgT2Jq ZWN0IGRlZmluaXRpb25zICovCisjZGVmaW5lIFBET19UWVBFX0ZJWEVECQkwCisjZGVmaW5lIFBE T19UWVBFX0JBVFQJCTEKKyNkZWZpbmUgUERPX1RZUEVfVkFSCQkyCisjZGVmaW5lIFBET19UWVBF X0FQRE8JCTMKKworI2RlZmluZSBQRE9fVFlQRV9TSElGVAkJMzAKKyNkZWZpbmUgUERPX1RZUEVf TUFTSwkJMHgzCisKKyNkZWZpbmUgUERPX1RZUEUodCkJKCh0KSA8PCBQRE9fVFlQRV9TSElGVCkK KworI2RlZmluZSBQRE9fVk9MVF9NQVNLCQkweDNmZgorI2RlZmluZSBQRE9fQ1VSUl9NQVNLCQkw eDNmZgorI2RlZmluZSBQRE9fUFdSX01BU0sJCTB4M2ZmCisKKyNkZWZpbmUgUERPX0ZJWEVEX0RV QUxfUk9MRQkoMSA8PCAyOSkgLyogUG93ZXIgcm9sZSBzd2FwIHN1cHBvcnRlZCAqLworI2RlZmlu ZSBQRE9fRklYRURfU1VTUEVORAkoMSA8PCAyOCkgLyogVVNCIFN1c3BlbmQgc3VwcG9ydGVkIChT b3VyY2UpICovCisjZGVmaW5lIFBET19GSVhFRF9ISUdIRVJfQ0FQCSgxIDw8IDI4KSAvKiBSZXF1 aXJlcyBtb3JlIHRoYW4gdlNhZmU1ViAoU2luaykgKi8KKyNkZWZpbmUgUERPX0ZJWEVEX0VYVFBP V0VSCSgxIDw8IDI3KSAvKiBFeHRlcm5hbGx5IHBvd2VyZWQgKi8KKyNkZWZpbmUgUERPX0ZJWEVE X1VTQl9DT01NCSgxIDw8IDI2KSAvKiBVU0IgY29tbXVuaWNhdGlvbnMgY2FwYWJsZSAqLworI2Rl ZmluZSBQRE9fRklYRURfREFUQV9TV0FQCSgxIDw8IDI1KSAvKiBEYXRhIHJvbGUgc3dhcCBzdXBw b3J0ZWQgKi8KKyNkZWZpbmUgUERPX0ZJWEVEX1ZPTFRfU0hJRlQJMTAJLyogNTBtViB1bml0cyAq LworI2RlZmluZSBQRE9fRklYRURfQ1VSUl9TSElGVAkwCS8qIDEwbUEgdW5pdHMgKi8KKworI2Rl ZmluZSBQRE9fRklYRURfVk9MVChtdikJKCgoKG12KSAvIDUwKSAmIFBET19WT0xUX01BU0spIDw8 IFBET19GSVhFRF9WT0xUX1NISUZUKQorI2RlZmluZSBQRE9fRklYRURfQ1VSUihtYSkJKCgoKG1h KSAvIDEwKSAmIFBET19DVVJSX01BU0spIDw8IFBET19GSVhFRF9DVVJSX1NISUZUKQorCisjZGVm aW5lIFBET19GSVhFRChtdiwgbWEsIGZsYWdzKQkJCVwKKwkoUERPX1RZUEUoUERPX1RZUEVfRklY RUQpIHwgKGZsYWdzKSB8CQlcCisJIFBET19GSVhFRF9WT0xUKG12KSB8IFBET19GSVhFRF9DVVJS KG1hKSkKKworI2RlZmluZSBWU0FGRTVWIDUwMDAgLyogbXYgdW5pdHMgKi8KKworI2RlZmluZSBQ RE9fQkFUVF9NQVhfVk9MVF9TSElGVAkyMAkvKiA1MG1WIHVuaXRzICovCisjZGVmaW5lIFBET19C QVRUX01JTl9WT0xUX1NISUZUCTEwCS8qIDUwbVYgdW5pdHMgKi8KKyNkZWZpbmUgUERPX0JBVFRf TUFYX1BXUl9TSElGVAkwCS8qIDI1MG1XIHVuaXRzICovCisKKyNkZWZpbmUgUERPX0JBVFRfTUlO X1ZPTFQobXYpICgoKChtdikgLyA1MCkgJiBQRE9fVk9MVF9NQVNLKSA8PCBQRE9fQkFUVF9NSU5f Vk9MVF9TSElGVCkKKyNkZWZpbmUgUERPX0JBVFRfTUFYX1ZPTFQobXYpICgoKChtdikgLyA1MCkg JiBQRE9fVk9MVF9NQVNLKSA8PCBQRE9fQkFUVF9NQVhfVk9MVF9TSElGVCkKKyNkZWZpbmUgUERP X0JBVFRfTUFYX1BPV0VSKG13KSAoKCgobXcpIC8gMjUwKSAmIFBET19QV1JfTUFTSykgPDwgUERP X0JBVFRfTUFYX1BXUl9TSElGVCkKKworI2RlZmluZSBQRE9fQkFUVChtaW5fbXYsIG1heF9tdiwg bWF4X213KQkJCVwKKwkoUERPX1RZUEUoUERPX1RZUEVfQkFUVCkgfCBQRE9fQkFUVF9NSU5fVk9M VChtaW5fbXYpIHwJXAorCSBQRE9fQkFUVF9NQVhfVk9MVChtYXhfbXYpIHwgUERPX0JBVFRfTUFY X1BPV0VSKG1heF9tdykpCisKKyNkZWZpbmUgUERPX1ZBUl9NQVhfVk9MVF9TSElGVAkyMAkvKiA1 MG1WIHVuaXRzICovCisjZGVmaW5lIFBET19WQVJfTUlOX1ZPTFRfU0hJRlQJMTAJLyogNTBtViB1 bml0cyAqLworI2RlZmluZSBQRE9fVkFSX01BWF9DVVJSX1NISUZUCTAJLyogMTBtQSB1bml0cyAq LworCisjZGVmaW5lIFBET19WQVJfTUlOX1ZPTFQobXYpICgoKChtdikgLyA1MCkgJiBQRE9fVk9M VF9NQVNLKSA8PCBQRE9fVkFSX01JTl9WT0xUX1NISUZUKQorI2RlZmluZSBQRE9fVkFSX01BWF9W T0xUKG12KSAoKCgobXYpIC8gNTApICYgUERPX1ZPTFRfTUFTSykgPDwgUERPX1ZBUl9NQVhfVk9M VF9TSElGVCkKKyNkZWZpbmUgUERPX1ZBUl9NQVhfQ1VSUihtYSkgKCgoKG1hKSAvIDEwKSAmIFBE T19DVVJSX01BU0spIDw8IFBET19WQVJfTUFYX0NVUlJfU0hJRlQpCisKKyNkZWZpbmUgUERPX1ZB UihtaW5fbXYsIG1heF9tdiwgbWF4X21hKQkJCQlcCisJKFBET19UWVBFKFBET19UWVBFX1ZBUikg fCBQRE9fVkFSX01JTl9WT0xUKG1pbl9tdikgfAlcCisJIFBET19WQVJfTUFYX1ZPTFQobWF4X212 KSB8IFBET19WQVJfTUFYX0NVUlIobWF4X21hKSkKKworICNlbmRpZiAvKiBfX0RUX1BPV0VSX0RF TElWRVJZX0ggKi8K