Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S941305AbcKXUqW (ORCPT ); Thu, 24 Nov 2016 15:46:22 -0500 Received: from mail-he1eur01on0136.outbound.protection.outlook.com ([104.47.0.136]:1056 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933643AbcKXUqV (ORCPT ); Thu, 24 Nov 2016 15:46:21 -0500 X-Greylist: delayed 122046 seconds by postgrey-1.27 at vger.kernel.org; Thu, 24 Nov 2016 15:46:20 EST Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peda@axentia.se; From: Peter Rosin To: CC: Peter Rosin , Linus Walleij , Rob Herring , Mark Rutland , Andrey Smirnov , Neil Armstrong , , Subject: [PATCH 3/3] pinctrl: sx150x: add support for sx1501, sx1504, sx1505 and sx1507 Date: Thu, 24 Nov 2016 21:45:20 +0100 Message-ID: <1480020320-28354-4-git-send-email-peda@axentia.se> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1480020320-28354-1-git-send-email-peda@axentia.se> References: <1480020320-28354-1-git-send-email-peda@axentia.se> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [217.210.101.82] X-ClientProxiedBy: DB5PR03CA0052.eurprd03.prod.outlook.com (10.164.34.20) To AM5PR0201MB2305.eurprd02.prod.outlook.com (10.169.242.149) X-Microsoft-Exchange-Diagnostics: 1;AM5PR0201MB2305;2:4ZlmZXu1P02C10XgY1x321oTQUOb22mrF157rdZtzpOjD+b5pDfS7hAZYoTp+7iq6cHEUUTjfnXFwOja9IQyVhyUJVu/3z+xPykeLL/Ae6sc81RjmJTjIFl3krsBzP8E1NQqb47Doe0HhxCSJZ+9SPG3+l2mlxujfWMks20mc+g=;3:/i78h84KFUbM/zjoB/Qynu7Hu4h2Wd1h1WXRMGtU5EJM6cmxzYNIzyyeFjJlts0PDTjPodM1r65rAfWXOLdj1y+ks3raz8kBNYUcq3f0ehQ+sSEMhawZR2kWV39N2KOA8TDi3TbIlE6/v+5KW7nkzo5lyax/F57+JzruBQGB4Pc= X-MS-Office365-Filtering-Correlation-Id: e9ce2383-4f3c-4295-4c77-08d414aaf076 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:AM5PR0201MB2305; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0201MB2305;25:JcRU6lMiJCgDCnIwwZyK9u1/H31gJNQdrX9gIzLukv21fDrqtM0VMFxrMcBYTm1yQMFfErnxvtU+dppW4n6JqMtc8jID1dFqXo7s508z6ONrS5RpqrUXQMfjTVU3LYx0QT4OV3GUJRQdnadyK8wKWmnT9ybQy7e9P/OyGOZiao6+ZtZGd9XoqsHMyOTYCuWsH0/2Mk/7U9n18OCKWOnneLuyNTUvpUvJDBnrx/11dU41W6YvvRWPHmhbfRABfT+klnhSpBqTxwYWq0dl2vTkQGmLXgR2vL6K0vC/bPCqWbOWvcGO62jU6k9/GI9PmbXtTnMXLya8NUO+HDteMctOS5CNGGi3mawhrX08mS+P4SHV8iBlEoFu8p9hE3aQm39W8FXoX50gVbi4UCx/jNPIFxTqaFCRBEEwMWwoCazXwNKoSub4MdS3vGEKeERXyyq+wMaO1YZHljzmjhGgiW0i7n7WrHP7Y4FK4LdRRzziIuYRgiNu7hQoDRGVdBrB5q0k3TIQh/7rPH34EytTTBNgzjpHEdCpSb+sRF1W+g1b6si1xKJS+WJdPVPfEVOTuBCrTsJ7btI2TIZ9Y2puvUyjqDMh6iqLBrueO724n54JwTKgCjWYmE2ufepMN6wuJwIr7gOA9xKa49Aaz612L3JVfZsDXaKjr3UhJxDMnXgcRiDMGzonPEgI63deCpOfLBhkcad7xd79dA0aJCENsC77/mrDxhG9waNAPrejBjjSZGiBP/EDe9j00QhGhor9GgzLbKj9eJ/2fwAiBjrYrPykbA== X-Microsoft-Exchange-Diagnostics: 1;AM5PR0201MB2305;31:eD081flKeEsmSI6wSQB6Yx0MYFLVLfArg2x3oZTAd/9OQc9U5i98xz3ce8EUb++eofal2cakPDG9zapHwY5KVNJpM5bFX4McoTrmhplfoGcyQJ3g8dM4xEd67N0PMKGUc2WvTwMrbVa53NmcEx03ZsIsg+2NZ9KQGYtGTkGBuYXIv1whnk2frga3m+PZR68hxSvUA/Z6hdRO97k+IMdQGKrNKxqJnCmZ81a+DEMkb2Vg4BPvtpJCPE3E9uXL93cXK1ABBTISJTtefDQhshQcQdLz1PmA81dqNb2TqcKzVjY= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6045199)(6060326)(6040361)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6061324)(6041248)(20161123562025)(20161123564025)(20161123555025)(2016111802025)(20161123558021)(20161123560025)(6043046);SRVR:AM5PR0201MB2305;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0201MB2305; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0201MB2305;4:fD7J7z+YGLMjSk59grLF3cQenGXb1g1koY4U0Ft8gGZdNxIJE/aMCwSNyJBCb/aE3p8mkvERP2N2IppoZgPoklWLFbBghcxUo5EeKADVGehMVC7iu5dF4SJm28mUPHqQdltEd8dK20GLEcoBb4Kl0oOWi9NrcDHPtmI2FZs9IdE5wCbNGw1vsK2gj/sRuIZ8I+3ZKwfhH+0hisIfyKICH71rsNpBlRopdNp/m/I00JH/mQNaIo7YuqUDgR4C5cu7a457xxv2BhGbna64MARhpz16BQt5wOQJKEr2KqyL0Yfuy9l3CCv9DEQizApN6e5qDID4dYEDSMWQdyN9fow0x9cpI3MoZb9pH5mtdLrgAiqT7dHPf3ENC3izyjGuIfHilxDZE/6FE0PchVkL9wj9QvCHxeNKK+qoxYNVFAQ6gLQYdzoANcix2KQ5QzuvnNfPcYXYlLSPrDF4f5szDhwzhlvxJMR3uynpK+Ec5Wj9ROFdubFvEp93HuGcCH/FZAVpF6J1fSZIduVPYyc67g17z7kn8P+xGACP2CNbDKXTuM+xgfva4kfuYBHpVVPbrvLdeRSB+QSPybXb73OWZnRF/PQKnuug91kYf0bOCHjkZv8jumLvPDaIFYWxzeGUNV4VdOJXHtvTfEbVwauAseBMAvHQ/o0LcQiPHxnyQejMp/3e2ZLPAD8GqZZQGCT3hC92 X-Forefront-PRVS: 0136C1DDA4 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6069001)(7916002)(189002)(199003)(92566002)(5660300001)(110136003)(305945005)(2351001)(2950100002)(38730400001)(77096005)(6666003)(74482002)(4326007)(39400400001)(47776003)(39450400002)(7736002)(48376002)(189998001)(76176999)(50986999)(2906002)(7846002)(50466002)(5003940100001)(86362001)(42186005)(68736007)(39410400001)(101416001)(39380400001)(97736004)(575784001)(3846002)(36756003)(81166006)(8676002)(106356001)(50226002)(6916009)(81156014)(6116002)(39060400001)(33646002)(105586002)(66066001)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:AM5PR0201MB2305;H:localhost.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;AM5PR0201MB2305;23:Lx5j6S/wPcIyV/7XfZrWoN+3wSig93JuHbaVGMt?= =?us-ascii?Q?pF3TzOdU+EsD5WSpbHNOlmD9L027P4J29U38cNfW5ukrp8BCMJY4wW6zxG5U?= =?us-ascii?Q?W1aZHEMwrklQssplvC6+CAeoWpP1PQlu3c0H3AIsZJjYehg+0t29AkXTbu7l?= =?us-ascii?Q?7S/pdibj2277bVNINPPMmyYNo9Ft2kTW1hYR6pgS8sQ61TPb7oSzAehA60OH?= =?us-ascii?Q?f5qptkibJnmo5YbKQ/6VPHp27OGj9327d5pvGkQ3+zR6rQr889POqSiaaL+Q?= =?us-ascii?Q?Rhgs4u4HcMu1Sk5dmuZjWXwHqjQFU/nIm+LD/ZOSwrZ7j8gYQSiBOLEdgRLL?= =?us-ascii?Q?8t7NTQJ8ALattSaiDvUKIVBj1tPKlEZCyBbOQSw7FpR1CjfpDC35zYU8M+y+?= =?us-ascii?Q?jETtiR87YMCOgD783QV4PG3vF09RDu81mZJYQFFPnA1fZXXNTiWn9ElNgqhY?= =?us-ascii?Q?G2x0B7MiFuyLRlrin4ZxlfffTkIVDbJjqvQR0wg96Sso0VkKYF5gT8/v7DnS?= =?us-ascii?Q?HKD0kK2NcjFsamN/GJQZtcRL5Q+Cog6+C8JshYtTG6zd1YPXW5y9ZyfLwqYD?= =?us-ascii?Q?fOXhd91V8H1JY/YLTYikF8TRjYCXOurHhd5loombQGS7Dh4zfcePJ/N5j+bI?= =?us-ascii?Q?123CD416Sj4eVg4DtWBClPpf73pvaiSsALlKH86ak6pk9LU9nLdPaMUxQQyB?= =?us-ascii?Q?rTDsXifI0FZlEj53eTTRulsQYfH2XQumFmymwjdwELjWCci4MI6sBbbx0jq8?= =?us-ascii?Q?eKm4WqkQsVvVz/4jNnbK9YM8bIc0VpZttaSCphKqPaTBhGesexMw28YYCu0z?= =?us-ascii?Q?X3C0dQvHI5XFtZkauISK2YA1Jqg71sYPehbx3BFLvNWAAJ9AcNKSp8bCXndg?= =?us-ascii?Q?18RlhIMTagPOVjOdPn//DzLBemzbeHsuh5kRLxydb8F1MNhI6A2aaQ5Ifpon?= =?us-ascii?Q?9FzIqDEEVjXiyhx/LEyEzxpDwL8R9p+B75meSi6/cEFeqoRHYYVHRQFlnnS7?= =?us-ascii?Q?b+engjxYU38lTtGiLYZ390QFrKaqV7OlCuRZ31DsdhClKHlwIQvqZ9T57KWw?= =?us-ascii?Q?GX/N1t+W+IXCMSSkFHc/cLQzidcMmfZg3oQ5HJF6O7D690qTs3FYGwNpROPi?= =?us-ascii?Q?JshwTK+tEHfM4hUGcC5gJRsdOafRlEV0ycn3HR+C7Ur2FTpR3aRMKl+OUxn9?= =?us-ascii?Q?9xan7khmLatPGifYtzOE2J4Yzdt0Oj1HY/llbj56tY+9FwtT6GanEhQYgy1v?= =?us-ascii?Q?tPkIwtN8TNBr8mekfIrQ=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0201MB2305;6:jUtGs9GDWzTFg5f8j1sBx4t4GryzbUgBCVJrLQTJFbCKBViQPSde9sW4nmhmomcJx2jKh4zeupjB1Eq9RQ7xPmWIB8oUE1DNDUwQmrFZSfd5FrlVXCOhHGAZI3VUPXzs0ejGlzALwI2G3uAwzPxWkxHWzG/7lpQ+aIV/tWIuhxM9QSRsNIEhzmrH+euYsERoJRA5h7Y/7XT+z7CZtkzytiNHRlOtc+pE0MATQJxA6Bqy/1oYXvKB9zN1XAzJvmztq/qVVtbvZIWCkh/sVyAIgnoeWoWUAcSE4zVH3G/9I9ZfBiZXD6r2xq3T3lWA2PudNztHtL+cW3oXB8inyVhrm6ZgYTMH6vVu8X1wqvn38KcKFD4dpa6AB2txrsExWGEl;5:K7ybMZcvd4AAouBY2MJbuHSeRbPYk2L9T3YfcwgDAwL2VqQ3kNM+/BdFLRW6ybh4/SRRqoz1AJ0Aj+RetrRswHos9jlTrbfrrjcIosSox8n7un8mDbPMW0fMTk8kJ1zjX37s3wd/WRrUCCqMPlXGzw==;24:Qn6MVGv13lFLOpNRHtMashgshLDwNwcrFRJTz32kv5xTShrOGNXHE1/zGXmF03Ust226+fhjo1UFHtRtdxTuNMJt5qUfzxM/HR08o+bOBXU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AM5PR0201MB2305;7:1KbfdLBJRXGxUC+hY3sKcHoUMvqqoKG3j7SPvwWMdVeFBjdvq1ttz6viAYSbidZApSZw5wTmNtD0aHU69Ig+vjGwFESK79zlcuJq07QiNpgAorJBuH3Fl6++hwGg2HLnMBf5VkP9NwP5Sth3Xh7XcxAV1IkKUnCllWphQO90cRQQLffDFhIF5xBBu72avwYOBvUsmu8IFhnqB95Xi58pyuqeGfybMu5RR1g5k7LhYKx10OjHcHezzDSIqPaFghN493SvBfag2M/4yJg7Fs/9nkA9m+R2+BiZfRa3eYwgYFEOi44NdDXlK5JCknHoPdgOAdYhr4MDyn05UX8/+HrNoxzBqfsJezNkoak3kiG2Ljo= X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Nov 2016 20:46:16.0879 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0201MB2305 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 6383 Lines: 195 Untested, register offsets carefully copied from datasheets. Signed-off-by: Peter Rosin --- .../devicetree/bindings/pinctrl/pinctrl-sx150x.txt | 8 +- drivers/pinctrl/pinctrl-sx150x.c | 98 ++++++++++++++++++++++ 2 files changed, 104 insertions(+), 2 deletions(-) diff --git a/Documentation/devicetree/bindings/pinctrl/pinctrl-sx150x.txt b/Documentation/devicetree/bindings/pinctrl/pinctrl-sx150x.txt index 83f8d5c449ba..bf76867168e9 100644 --- a/Documentation/devicetree/bindings/pinctrl/pinctrl-sx150x.txt +++ b/Documentation/devicetree/bindings/pinctrl/pinctrl-sx150x.txt @@ -6,9 +6,13 @@ pin controller, GPIO, and interrupt bindings. Required properties: - compatible: should be one of : + "semtech,sx1501q", "semtech,sx1502q", "semtech,sx1503q", + "semtech,sx1504q", + "semtech,sx1505q", "semtech,sx1506q", + "semtech,sx1507q", "semtech,sx1508q", "semtech,sx1509q". @@ -28,7 +32,7 @@ Optional properties : - interrupt-controller: Marks the device as a interrupt controller. - semtech,probe-reset: Will trigger a reset of the GPIO expander on probe, - only for sx1508q and sx1509q + only for sx1507q, sx1508q and sx1509q The GPIO expander can optionally be used as an interrupt controller, in which case it uses the default two cell specifier. @@ -43,7 +47,7 @@ Optional properties for pin configuration sub-nodes: - bias-pull-down: pull down the pin, except the OSCIO pin - bias-pull-pin-default: use pin-default pull state, except the OSCIO pin - drive-push-pull: drive actively high and low - - drive-open-drain: drive with open drain only for sx1508q and sx1509q and except the OSCIO pin + - drive-open-drain: drive with open drain only for sx1507q, sx1508q and sx1509q and except the OSCIO pin - output-low: set the pin to output mode with low level - output-high: set the pin to output mode with high level diff --git a/drivers/pinctrl/pinctrl-sx150x.c b/drivers/pinctrl/pinctrl-sx150x.c index 97df9302e84b..eb6adbbd33f0 100644 --- a/drivers/pinctrl/pinctrl-sx150x.c +++ b/drivers/pinctrl/pinctrl-sx150x.c @@ -116,6 +116,14 @@ struct sx150x_pinctrl { const struct sx150x_device_data *data; }; +static const struct pinctrl_pin_desc sx150x_4_pins[] = { + PINCTRL_PIN(0, "gpio0"), + PINCTRL_PIN(1, "gpio1"), + PINCTRL_PIN(2, "gpio2"), + PINCTRL_PIN(3, "gpio3"), + PINCTRL_PIN(8, "oscio"), +}; + static const struct pinctrl_pin_desc sx150x_8_pins[] = { PINCTRL_PIN(0, "gpio0"), PINCTRL_PIN(1, "gpio1"), @@ -148,6 +156,26 @@ static const struct pinctrl_pin_desc sx150x_16_pins[] = { PINCTRL_PIN(16, "oscio"), }; +static const struct sx150x_device_data sx1501q_device_data = { + .model = SX150X_123, + .reg_pullup = 0x02, + .reg_pulldn = 0x03, + .reg_dir = 0x01, + .reg_data = 0x00, + .reg_irq_mask = 0x05, + .reg_irq_src = 0x08, + .reg_sense = 0x07, + .pri.x123 = { + .reg_pld_mode = 0x10, + .reg_pld_table0 = 0x11, + .reg_pld_table2 = 0x13, + .reg_advance = 0xad, + }, + .ngpios = 4, + .pins = sx150x_4_pins, + .npins = 4, /* oscio not available */ +}; + static const struct sx150x_device_data sx1502q_device_data = { .model = SX150X_123, .reg_pullup = 0x02, @@ -194,6 +222,47 @@ static const struct sx150x_device_data sx1503q_device_data = { .npins = 16, /* oscio not available */ }; +static const struct sx150x_device_data sx1504q_device_data = { + .model = SX150X_456, + .reg_pullup = 0x02, + .reg_pulldn = 0x03, + .reg_dir = 0x01, + .reg_data = 0x00, + .reg_irq_mask = 0x05, + .reg_irq_src = 0x08, + .reg_sense = 0x07, + .pri.x456 = { + .reg_pld_mode = 0x10, + .reg_pld_table0 = 0x11, + .reg_pld_table2 = 0x13, + }, + .ngpios = 4, + .pins = sx150x_4_pins, + .npins = 4, /* oscio not available */ +}; + +static const struct sx150x_device_data sx1505q_device_data = { + .model = SX150X_456, + .reg_pullup = 0x02, + .reg_pulldn = 0x03, + .reg_dir = 0x01, + .reg_data = 0x00, + .reg_irq_mask = 0x05, + .reg_irq_src = 0x08, + .reg_sense = 0x06, + .pri.x456 = { + .reg_pld_mode = 0x10, + .reg_pld_table0 = 0x11, + .reg_pld_table1 = 0x12, + .reg_pld_table2 = 0x13, + .reg_pld_table3 = 0x14, + .reg_pld_table4 = 0x15, + }, + .ngpios = 8, + .pins = sx150x_8_pins, + .npins = 8, /* oscio not available */ +}; + static const struct sx150x_device_data sx1506q_device_data = { .model = SX150X_456, .reg_pullup = 0x04, @@ -217,6 +286,27 @@ static const struct sx150x_device_data sx1506q_device_data = { .npins = 16, /* oscio not available */ }; +static const struct sx150x_device_data sx1507q_device_data = { + .model = SX150X_789, + .reg_pullup = 0x03, + .reg_pulldn = 0x04, + .reg_dir = 0x07, + .reg_data = 0x08, + .reg_irq_mask = 0x09, + .reg_irq_src = 0x0b, + .reg_sense = 0x0a, + .pri.x789 = { + .reg_drain = 0x05, + .reg_polarity = 0x06, + .reg_clock = 0x0d, + .reg_misc = 0x0e, + .reg_reset = 0x7d, + }, + .ngpios = 4, + .pins = sx150x_4_pins, + .npins = ARRAY_SIZE(sx150x_4_pins), +}; + static const struct sx150x_device_data sx1508q_device_data = { .model = SX150X_789, .reg_pullup = 0x03, @@ -758,18 +848,26 @@ static const struct pinconf_ops sx150x_pinconf_ops = { }; static const struct i2c_device_id sx150x_id[] = { + {"sx1501q", (kernel_ulong_t) &sx1501q_device_data }, {"sx1502q", (kernel_ulong_t) &sx1502q_device_data }, {"sx1503q", (kernel_ulong_t) &sx1503q_device_data }, + {"sx1504q", (kernel_ulong_t) &sx1504q_device_data }, + {"sx1505q", (kernel_ulong_t) &sx1505q_device_data }, {"sx1506q", (kernel_ulong_t) &sx1506q_device_data }, + {"sx1507q", (kernel_ulong_t) &sx1507q_device_data }, {"sx1508q", (kernel_ulong_t) &sx1508q_device_data }, {"sx1509q", (kernel_ulong_t) &sx1509q_device_data }, {} }; static const struct of_device_id sx150x_of_match[] = { + { .compatible = "semtech,sx1501q", .data = &sx1501q_device_data }, { .compatible = "semtech,sx1502q", .data = &sx1502q_device_data }, { .compatible = "semtech,sx1503q", .data = &sx1503q_device_data }, + { .compatible = "semtech,sx1504q", .data = &sx1504q_device_data }, + { .compatible = "semtech,sx1505q", .data = &sx1505q_device_data }, { .compatible = "semtech,sx1506q", .data = &sx1506q_device_data }, + { .compatible = "semtech,sx1507q", .data = &sx1507q_device_data }, { .compatible = "semtech,sx1508q", .data = &sx1508q_device_data }, { .compatible = "semtech,sx1509q", .data = &sx1509q_device_data }, {}, -- 2.1.4