Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966371AbcKXVCn (ORCPT ); Thu, 24 Nov 2016 16:02:43 -0500 Received: from mail-db5eur01on0103.outbound.protection.outlook.com ([104.47.2.103]:52595 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S964897AbcKXVCl (ORCPT ); Thu, 24 Nov 2016 16:02:41 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peda@axentia.se; Subject: Re: [PATCH 3/3] pinctrl: sx150x: add support for sx1501, sx1504, sx1505 and sx1507 To: References: <1480020320-28354-1-git-send-email-peda@axentia.se> <1480020320-28354-4-git-send-email-peda@axentia.se> CC: Linus Walleij , Rob Herring , Mark Rutland , Andrey Smirnov , Neil Armstrong , , From: Peter Rosin Organization: Axentia Technologies AB Message-ID: <426fb28b-fa0e-f3a2-3bf7-dfe2761c78f6@axentia.se> Date: Thu, 24 Nov 2016 22:02:24 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 MIME-Version: 1.0 In-Reply-To: <1480020320-28354-4-git-send-email-peda@axentia.se> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-Originating-IP: [217.210.101.82] X-ClientProxiedBy: HE1PR05CA0017.eurprd05.prod.outlook.com (10.162.181.27) To HE1PR0201MB2313.eurprd02.prod.outlook.com (10.168.145.148) X-Microsoft-Exchange-Diagnostics: 1;HE1PR0201MB2313;2:8qzzkFc6LQbE+xClOfpv83kmP1xG62RRPUfOhr8138NiFouIayVRiAC18NImfoDoAg/kUJR3fUmwXdC+N1sdJgnGaGOcJHfTLZvZ6TVH4FRbyW3pF4Xc3cfTFofPe+d4KkVbA2dybeuKw2HUMN8l6HWMypViH+Xbjvs6hAJ87sU=;3:FJvyBWX9bnQQNwLoM2+u1qkNC8mP02HUgodPyFUTcXt2Da9eMAklP2YgDHaMJ/7Muh/2KTaEv8q68pRswGaiat08bAmZQei6LtlrruXECVpsVr/UhGZKDKocBN4acQnCsEjamt6fQb8xlDnkLeOn/9TicbFnrZjWdDzbSpl5dwA= X-MS-Office365-Filtering-Correlation-Id: 001aa30a-5320-4603-bd1a-08d414ad33ff X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:HE1PR0201MB2313; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0201MB2313;25:wCVlH4lPPC4dBtBySJTFb7IbcfuEs3JPa2BHDyDSyd9DGVajj1mfnzlBY+Y6znF6fpMVFgFbgYTk9B1fD/IxstgnBIpTuj1FjFr35V2KTBhU/3TrRXBcSVexG7QKkvaG8vVPCH2cfFsY8YvKNf2gbq4pvGJETbGp289yuwH1hmATKccz6AqVPR6sgXoCvfDCi5N2A4vYagHTayjPjDconneEwBmqFoEyFjZUCJgH0FcMjvIw2EoWvBmMDI6HrB/bjKipPbjjeIFHARWkJQszcQ65d4d4rs9nAU1oIkArhJvs5qKOkvE8Zfqu1VerHdjPrMC+fwCwKYQAd5RHmyNBS2ODTTRO12GjHcD0EBXSgJpA3QpS502UDOcRcqY2ufNI71nZe/09wSx9VkHCipgdmTWZzTUXoWZ5nxWbb4liHGNmGmGGNdzYp+DwujAHjV1P4M8irOIabqvC21WSWNhuYO/RFp7y9QiAMxeVC3IW9gwXWJvRok6TmOsBXeWo+8XCMO5nkCCYvcKBmtUEQcD9HBW7klC6FnFawJI3bYYehVxdTrDfUsvDralRCqchb3tEbIgdR/iy4y/VPNynR1mCA6cV7zKJFJa00890dVLU74QrwvLarYRJZqv8Lx141/EReJaAldPx83rB28fyopLofr2bI8IWF/m6HaL7hIBekgej3QDM2FNzt9hc1GZ6oc7f1kB5L4dFE2DG6nAyE8oVXBObMvGvDxf434mgfQqrosOGCFVawOtC+8lxZww04Dfy X-Microsoft-Exchange-Diagnostics: 1;HE1PR0201MB2313;31:uL8/Ost7cNamRFnVX36WImQ+cejrvuqsOqjqr7MnkFSx5E2emuaKboDoQHIRav9TgTWZzV2udwXy+8O9lSnv+snXKQk4ySw7gZeWGmLKBlGFpGYRkrMxp+/pHKv2dt+tLOWQofJemf9MR7+DLVWwEzWydWARgTMYHXDDlafSIIe9DM/SIMIoL9vQSg1HawBWdlr9eanY/Di4uBoXecrdRabyjOS6CAAa5zfItX5OdSfaBpYweRbEDURg+M5Odp06O9/lw4m35jUZYSv8QxFVTA== 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)(5005006)(8121501046)(10201501046)(3002001)(6041248)(6061324)(2016111802025)(20161123555025)(20161123564025)(20161123560025)(20161123562025)(6043046);SRVR:HE1PR0201MB2313;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0201MB2313; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0201MB2313;4:yi0Yz8Pm5I7Y/ez12ivcytkkMUz2SwYFLqhmPOwqnRjZ2vCVnNizkmfBwMPvffKBsble59c19aYqzH3xe33GgCwrAUbrybc4GISFR7ecMs105Mt4p00qGLSWCsVFr/ZhdFkq56PoMLiejFgS84/CIbZSUUegF/+XifdTO+iRW5zITRVnb8SEFEO4p6TtOJPPUufXyNjLeLmQpUxdS/I2PZKeMDwlJqy2hSCsI8DfV2lzoPk+5Mv7/URT7LOFsdV3Y4WmbYTTt4tw2vIatvlqHzpe2vkU0X4u3egF5pFFknKabgqzkELaJWBHTK0VrKVC2pCktab93FI8xS2G1KU3nFsBYsFlNo/djbc1KKtSqb2JOyBLX0HOyFA4ropnPEIYlN5oPDdGveLyxU4eIL6vpVuU7mPpFZb25Ed7tsefw7j0zUSOt/3u0+u9vxlMCd64r6BR1/9+2+N/2WYU/Tlu/kpHwM+e8p8nUI80UbM3zalsdjj2NMb955oRA2pKBNiQPhl3SlJYxUcRwLba/5sc1fuPTfJUB1E+HgzTM6auLxC/D/LNrRS/57KlpwLimNVdpd3EEX8+cCHX73qkSRTkJw4LFZGNYSClrQs0IurzqzNQ172sW7/jXgYEV3V1VmIxjZGW9M7pZ6UJlYAbiq+sXIn0u7S+xKuzrDZf9lukoEA= X-Forefront-PRVS: 0136C1DDA4 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(7916002)(377424004)(189002)(199003)(24454002)(8676002)(189998001)(6916009)(39380400001)(230700001)(39410400001)(110136003)(6666003)(65826007)(229853002)(83506001)(38730400001)(2351001)(6116002)(5660300001)(305945005)(105586002)(39060400001)(106356001)(4001350100001)(117156001)(2906002)(77096005)(92566002)(4326007)(97736004)(3846002)(7736002)(68736007)(54356999)(31696002)(50986999)(50466002)(42186005)(65806001)(2950100002)(575784001)(65956001)(7846002)(81166006)(81156014)(74482002)(47776003)(86362001)(4001150100001)(66066001)(33646002)(101416001)(76176999)(64126003)(23746002)(31686004)(36756003)(39400400001)(39450400002)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0201MB2313;H:[192.168.0.125];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;HE1PR0201MB2313;23:zs1W1QY8k+lTmciyGfI1koXjBEdOfhiqgtS?= =?Windows-1252?Q?oMroNHQxycS/QCbujqNkywCCfAZFw44V6T+lLLXSvZkXVYOi11wApk/k?= =?Windows-1252?Q?U2oFIzjp8U7j645aLUYfaLQFcq4AoiszT+VinQMmXhwCu+gb5N9v8ex9?= =?Windows-1252?Q?eUJ4kwlVhvLZ1r2P0eZ0BKfmR8Bg8fN7l6fmhdpNIZ+hKe22u7lv2GZ+?= =?Windows-1252?Q?aGSG+ULBo0w+/54zn9zC8ZaCb1rnNiVnZ/kkVSjLGSyTf4Tv8M4weyE7?= =?Windows-1252?Q?2zYlCRBfn7pDpZBbXyejf5cKN0YcJBJWeKUIolGpqlIO5pynXbxf1c6W?= =?Windows-1252?Q?EPLJdngSZXQ9OjWX5/FtMZz1pDcS9uZdbTT78G/EmWqYwXImbPgCwJMM?= =?Windows-1252?Q?jTP39vWYB9S24Xb14CXyFioLFBNbWibXRo5N8jSgAYzrwqaUvFknWly0?= =?Windows-1252?Q?h6Ne47Wf72IiNqsJvE+JlDX4MXHhQlW0Aq/mU5d/BLG9ixwVgXuEBNvJ?= =?Windows-1252?Q?XMkldcKjqTKTp32ZVueqy4bRf0QGjLqmEl1XiaEWgQ/6/qO3bcJiWc/g?= =?Windows-1252?Q?zr2JYNqEUhTt/9+oFx8jpxwy0HxhOdDbO+Axj1aL9ewu3ogp6MRWGiz8?= =?Windows-1252?Q?GlsILn1HmZIAsjs1hZKhKdCPK2Wmmn5uM7wjJ64UQLEiVQEulW8rF8rz?= =?Windows-1252?Q?S9SQTa0EkGhS6+or9bubYJ+E43qIAVFM+qVISJo6G5z2JFshKPmuvG6a?= =?Windows-1252?Q?kBv1oIhPbSEvbIgfA+5fXikZU80SNqdSflHGR6UaIOtB+0VdQFKdyjIg?= =?Windows-1252?Q?6DnAwgQaia2OOn9+OJBcW4mXOZ+exPVCXcWZObBiZxjEWSb8dMBeo7yw?= =?Windows-1252?Q?L6YQYhw943KqoM3M8FY62Il6432cXqcbbj+CkryfqK4rRInKoAQ4ab9W?= =?Windows-1252?Q?T2Bk7wK6+aLUtY2r0legVr87P8NJi1cPtwujvoHTYMUbazXEnKvz8n3B?= =?Windows-1252?Q?3B3NEgSz8U3QHQTzjCjTJ/6p6wgMWP9rN0A362OHXdry5cOZMmHs9J18?= =?Windows-1252?Q?PP3vVZXfpSR64HRQ6lJEXDNxIfJcISJ/dYL52yJMlmW3OMtA4FEu7HyN?= =?Windows-1252?Q?qUWSqzy9sSLBypGcXLK4Tqs0yEayHa27o3XHvIQCq+8la4nBolz49RHP?= =?Windows-1252?Q?e6O94AWYPZta2nxutclmeo3v+fw3jnFa8uIFRgeEJIaunXvvE/MU1m8a?= =?Windows-1252?Q?7+kQMo6TnxaZ4w0B6sjWFLzUBc9TzKIS018ixaMNlSVPp0Pn+0EVTsvz?= =?Windows-1252?Q?iIScX7pPGajF00GlM49JuvGb7Hi6ifGuFeZSsEW7Z3qM7Oy8efEzinOj?= =?Windows-1252?Q?yQ7n4RTe2DXs5AMQ01NtOYqg1ZGDq+QVhU2DImDn+Irpq8v06Uwz+k8P?= =?Windows-1252?Q?6cukfPBZT33ONq10khcCvwPdSPWY8tAEPvf+uxtiWiPh4aaLLO+vkxbw?= =?Windows-1252?Q?SjyevZgwmGBeqsYkewU+2FjEq7YSJLpm53Go2iUVpm6nOWgePDaxnSqL?= =?Windows-1252?Q?amBDZwHxvEOG29fgcVbzliyefTm/APHYzUN+qkRHks+9jr1hE/rN+xvD?= =?Windows-1252?Q?CNtvtRvKvswr5A9ZP5fJ3FvHrVn1u+SYALoFUvyQR59PXz/GEMauP2cq?= =?Windows-1252?Q?4dxsTJIlYDA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0201MB2313;6:3OJkCt08elQRvAJuhgNpg53anleIQVf+n/klZDy6kKx8muyfYG/AdFXUOtxukQBNqSC/6oOkQFesrqxcHwVAepnmPqc7QWGQyyFeCBsVZEPkpyBuZIfptkFiaRu0arLeZmQjm/bJtWIvOmwfiWyd15OmClTIL0+dR8ZrHu+wkFTawUsNeHVnflSApo1MeTT3C8OJpWjL9Y7dO0PAYyQNXZ1rCBM7/fCGqbY4tIMYFEB4ZZgIcBvv3U/bf6iXS2AUJJTfIUZu/09+/yZyT4RafFcIFSOz99RGVb8Vqe5lIR6B5YppyJ4fFsPsk5utLlYJ2K0E9O+npmDgdOoOj1tDxXYmvRN3A3HCmZ3F5GhCPD3etx2f2MnHXCTvg85K+ZCq;5:iHkqHvIfcEV/HB5eOWUJix55XwcEQw63azmhkJQZkpcVl+xccsJgxD80egjGe+4qg3OCshI6x3cO6Tdf3DTweeUvaqjr6XO1FRi+UH2KiWX5mXGeVDaZBrsIdbFrvNlw0ErfYjsgW8tBcPDlbOUpAA==;24:7Q3rG6zHnejPrRhjSfs0A5Kvvb/NQCGmF/8PLFi5zjQdDmkpFzpjZrCLkXZJVET+noD0OkZrIM8tP20a0YII6jCw0X/xdoAYoAZKM0FexWk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0201MB2313;7:gpHbMG0Y6Fbuq2LRn0d/misv+iDIv+Xm5mvdvDkUMM2s/mMdSt6hVuQwx/KwGZiEv7JI7GYGfUOK46lIu6M4SH6hyhUOi+fi1vZnrpV2gn4AWz1519hsF8TYt087N4CgF1pfRJjzsL/5uMYfGfrL63L5jnBecDeC/X/OrdXwHVqMd5ElG4ZkZPZ54cfc7fAeTk7rkwZDMjSHcXv7noMCRXSxYZJ5HWdFkqkctIktEiRaVndXX9KNQ8J47HYpww1GB6p8j+sgs9DqogrBfJJrD3dEy2MozHIfc5BSWAIsrDuv3EiSLH4mStRwjFuRz3210RB47dQjN3PnWFjETt+MkWUzJQlcJxjQOxhyglwVigs= X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Nov 2016 21:02:29.3802 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0201MB2313 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 6910 Lines: 204 On 2016-11-24 21:45, Peter Rosin wrote: > 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"), Should of course be: + PINCTRL_PIN(4, "oscio"), If you want an updated patch, just ask... Cheers, Peter > +}; > + > 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 }, > {}, >