From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932902AbcFUILj (ORCPT ); Tue, 21 Jun 2016 04:11:39 -0400 Received: from mail-db3on0126.outbound.protection.outlook.com ([157.55.234.126]:19456 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753007AbcFUILN (ORCPT ); Tue, 21 Jun 2016 04:11:13 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peda@axentia.se; Subject: Re: [PATCH 3/3] iio: potentiometer: mcp4531: Add device tree binding To: Florian Vaussard , , Jonathan Cameron , "Hartmut Knaack" , Lars-Peter Clausen , "Peter Meerwald-Stadler" References: <1466492137-32683-1-git-send-email-florian.vaussard@heig-vd.ch> <1466492137-32683-4-git-send-email-florian.vaussard@heig-vd.ch> CC: Rob Herring , Pawel Moll , "Mark Rutland" , Ian Campbell , Kumar Gala , Slawomir Stepien , "Joachim Eastwood" , Matt Ranostay , "Cristina Moraru" , , , Florian Vaussard From: Peter Rosin Organization: Axentia Technologies AB Message-ID: Date: Tue, 21 Jun 2016 09:51:52 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 MIME-Version: 1.0 In-Reply-To: <1466492137-32683-4-git-send-email-florian.vaussard@heig-vd.ch> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-Originating-IP: [217.210.101.82] X-ClientProxiedBy: DB5PR0101CA0003.eurprd01.prod.exchangelabs.com (10.165.200.141) To DB5PR02MB1302.eurprd02.prod.outlook.com (10.164.177.148) X-MS-Office365-Filtering-Correlation-Id: 053f0283-cf00-493e-0ad3-08d399a8eba2 X-Microsoft-Exchange-Diagnostics: 1;DB5PR02MB1302;2:Lz5L7r6O6/CYG7ye2kNLdEPclCrLRt8TqY+onKbKL6q0eHfX5tdEa4Zj1p75FdcIHgl8jZl9F/aQWi5+VwowM4ILskLRoriCEq1RyZheb2BgFTFKAsMEDCpvcHej6qip6opygQKFMIjmxcZSFVaXe3TYP9jbM4vFpiMQ5fT/hxecmINP8PnedB0opaReV+cA;3:Spfg2rcvSuUJUjh52WQ9nvyaXLtQFjYi/Yc5APzkf2RpiNSJ663iWTnZUZZN/tcbYiY1Zu2MRRqR1eo5GoG37zf0PZv1EMLKacV195IUhTRz+wRsvrOP0ehv/SwIXnEN;25:VTkB1ME3BfUnX/YooPWUjsayb0VGrqtmSl8L5mBQzZ3DVoPckMSSzI/8oKTKpnxcCHK9aa22sOvUrBCoCi8VAgodpSJUZrAOoK0+5pG0I2ppk+7JNVbcr0MC0JwkIbOpBD3k6NjO8TrHzKu+wQbLv9vKQ+nHLkVVZYPbIu1+IHT5P1VNhhpFUyhMfroLu8ZlWjf+qy34kjmkt/6Ei+5uH+cJ/J8SsXBRuljFfCB+OxRIUTXrehTd9skUyFexuyNVdYXq76bz78r7P13e3ZcicqW/DrgGuIoQbGb4s5kdQPKiAc87b4CxCAYrcT9I9i3k7g747zPzHMaianYKVuQtrdCyJj4Yds7sZmmvx6I1VbC7thNmQVRfKYH5GFRvC9yP2nV7XrKEFu051ynoztOS7cr3+eVNjCmailL6RuYhuIM= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR02MB1302; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040130)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6041072)(6043046);SRVR:DB5PR02MB1302;BCL:0;PCL:0;RULEID:;SRVR:DB5PR02MB1302; X-Microsoft-Exchange-Diagnostics: 1;DB5PR02MB1302;4:JZUi0YdOHDYm6e3gOfU9RTeYEPQZIIre5422lVV32EU+w8P5Oh18eM3fO4QIbUhVfvL/FIOcDfOobmvLN9fU6w/zB3b2YwiEVw3XoZhU+XnbYSR3L1YdfZYMZEPA324KdFa6jpdpk4QQj6Yue71dcDLKG5o1TbvScPWdSG6ZtEdYcv0DeWDvCVznd+tn27VImX5QhJvJIQXcTSBMjJGD5OASbo8s3MOwbKu6gm0vASF47vEAfRJbGLK1Pfk5KYzU7ykKaBOZmarO5bO4IywoSkSlchfy28lDOTmTGjwNaidf7bCOoJtfmnsy294RjTm7WExJ3IBJM6c8r55D1zDqwN+IHelEcbZ4nHIEaf6YTc6zioIcUks5N9J28CaZr4dyut1Pcx8h0RbQIQjcmGgX1RUoCt/60FY/pf7JmtyT3As= X-Forefront-PRVS: 098076C36C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(7916002)(377424004)(199003)(24454002)(189002)(3846002)(6116002)(105586002)(117156001)(586003)(33646002)(50466002)(23746002)(8666005)(4001350100001)(36756003)(5001770100001)(97736004)(64126003)(65956001)(101416001)(2906002)(19580395003)(47776003)(68736007)(2950100001)(4326007)(66066001)(77096005)(31696002)(230700001)(74482002)(42186005)(31686004)(8676002)(19580405001)(189998001)(81166006)(92566002)(86362001)(106356001)(50986999)(54356999)(76176999)(83506001)(7846002)(7736002)(65806001)(81156014)(65826006)(7059030)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:DB5PR02MB1302;H:[192.168.0.125];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;DB5PR02MB1302;23:zqssS9VJShfDWUKMIGAcoNH05EYMPVcgtr7Nx?= =?Windows-1252?Q?woNKPvRNd59cxpRB/Qxp7HeOGm6KcSH1qQ+7zlfvuh4qBOTsm3ciN5jg?= =?Windows-1252?Q?cgFwtE/vZIz87ybIgH/UECpCnB4LDE3KCVp5urAuO82ouj7onqhkJNm3?= =?Windows-1252?Q?P5GbmEgPgxa6AUIhuT4xxeVme/yJazWkzwWbQDBHORDV4bJVJJjZCKhK?= =?Windows-1252?Q?GqLkSGgrHb1yd30fnUTvXBoQmOVDjndOCj2RNYHhnvYe+qHGbzIOoVjs?= =?Windows-1252?Q?DQ941fODC3ElW+kd4orXsH4APMbHf5qzF8e0J4eBUPMIOiDNCPQykgTO?= =?Windows-1252?Q?RaVjzTdbHLheHN82JOlyEQWpBD6EBFgAvahTGU8+7K1aKSR2QYqYO603?= =?Windows-1252?Q?CjWN6zNn8TOI2lOtJYqS8EbA0qNtMYHEwHQe2TLx4VqcrovwRFsB52uC?= =?Windows-1252?Q?IJpMtNkA+TCn7Qd2Qyr6ptTiYk4VrYet7J/tcvCG08qXbwoycaGob+UD?= =?Windows-1252?Q?Gg2b/19MkC3NoqSIJjzNhVoROqTTjsprz7DAo7O9p1HlbR4XrB8Gk5jZ?= =?Windows-1252?Q?6XadDU7e7ZqfMihSHuBuXnHJduXYGwVKULuuUDecNK5Vu/W1glrpxMat?= =?Windows-1252?Q?wAUJbOHG1lAFC5f5ROXuqcS0/C9W0s854mcCC+682EgpgH4yUAqdksEW?= =?Windows-1252?Q?Pvi4dRVhF8mjyvmcUCnXmT2CYfWjOlagdENP/+vkkvgECB1cedApWUA9?= =?Windows-1252?Q?IbvmkZzUjvHGC25QWssI7P3pUBy64rvpCYdyH0+NCJerT1GFgQ8N5dTE?= =?Windows-1252?Q?JVOZTQpdJlzDWQb4YRqbXOraIP1iBoyt6t2A6KofKCv/QIozhy9IUdNv?= =?Windows-1252?Q?aD3t4njPq9KjaCHNVKnZ/tJ3bIXsAOrmt+kMdCmb/6e9xKig6j8V9CHs?= =?Windows-1252?Q?vnAq8wJqlp552dmEh5XrMS7IFP2adEJPHZeIzA3WeOc9LDTWp97iIsVu?= =?Windows-1252?Q?cV3R9jcvK/Vew8VSzjdE+ok+ZFszKdl6ZQR2IWmEIh9uD1bw1abtLOhg?= =?Windows-1252?Q?Q0ftuzKYQXXTQoAXVxB50uZn+MixOO+ZWNMld8DpXp3pjafqrNdeuCsl?= =?Windows-1252?Q?jA8/0WkVmogln9SZY28FJxH+uZxpDPSaAmIRcNnlrReR7R5UxKT69ytx?= =?Windows-1252?Q?1QhsIbAPq1yIvj1VyLGezvTQTkxYyApcY6P4DL2K6OIY2QRFZVRqUJya?= =?Windows-1252?Q?8fLyslZXmD5EJnaXCEovXbSzu0X7Tnq/Bvm+pGfrtrAu3rPh5kRbDTuk?= =?Windows-1252?Q?xxjtUJkTcJumH4eMAavfZBpyMdsSKxkZLvkbtXpYoytKgy/4lQa1YfG0?= =?Windows-1252?Q?d54iGJgpVcVKrEvmzq4s7UBtYiqcNbsEJTqZSa+Aa+v4NvUWhjJVG1ZP?= =?Windows-1252?Q?n1LjnysFyu57rUG/3Z2Q2VUmaBPa8t5cq3KprI6bA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB5PR02MB1302;6:HW27NkeE9Fw1EWmA2TWqq2nVmFdmStSd2Rr92oD6iMaZgqWVgwtdWAvUgRsFWjjo+BGLIyKLKpvULqYitwZtj2SYViHPejcwqWkcH+w5CSeQrL/REj2j0VxiQ7YvgzL5iI3AA5JhMQmIxoSJTvAuPeP/5uMLt/fobqxL5d4dRSSrAud3rq5EFWs6rXA+4MpnFnLxb5TFnikLKIgKM4QcvdZOmNzEWBXiivRceZgvUNBBjRDgak5meblV1h6Dr1Y9LuBYrCX63XZ6eJ58daika6Uphyv36fDnYT8IxukdKKsETNgoOVpMklGbcyO4qpQn;5:B0trg6JWQcwb4mCWzZC8/LAWnzZp7KzRvVkbMLTsrfMUENdfDrwPNIvsNJikbaOr7pSwEzbeFuV3bBqkV0o0roEYeZLN0cS4W6/C2+TzqVOZRfRlfiJNQIygM8YEgYG5uEjZFoNeLjVvZptDZx5l+g==;24:ekJHsn3zwbD36RbRLfvdA4JQvz7bcXSig+ffOdC2ZRGCM9FkANS8/BHgdgL/NCz2Evb8HpZhcE8BLho7UOxKKYNJMiXl80q5Kus0XKDBS+M=;7:caTZfOzZ2QXcZdZUmr/7+Ica5XQ8I2hR5dbMi8+WU451JJBN91uIhVzQhSJz86vl67J57O3iSnbjPHwznH2+otJRenXw3s+vgJvBxV/aEcVIyTqGxa+49u04PGo2GrnRayLVnlS2OxbUhaRwszROXLAG+1HrB3Ktwc2oo0rfWlCf0vGMq4NJQCSkw+dU+joTRFa2FWmoZ9nu0NzRGqPdvG57vj0N3hivsOhU92RQE0BiiIi80T66CAy1mL4CH1b1 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jun 2016 07:51:55.9108 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR02MB1302 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2016-06-21 08:55, Florian Vaussard wrote: > This patch adds the necessary device tree binding to allow DT probing of > currently supported parts. > > Signed-off-by: Florian Vaussard > --- > drivers/iio/potentiometer/mcp4531.c | 83 ++++++++++++++++++++++++++++++++++++- > 1 file changed, 82 insertions(+), 1 deletion(-) > > diff --git a/drivers/iio/potentiometer/mcp4531.c b/drivers/iio/potentiometer/mcp4531.c > index 2251173..41a1e46 100644 > --- a/drivers/iio/potentiometer/mcp4531.c > +++ b/drivers/iio/potentiometer/mcp4531.c > @@ -31,6 +31,8 @@ > #include > #include > #include > +#include > +#include > > #include > > @@ -188,12 +190,84 @@ static const struct iio_info mcp4531_info = { > .driver_module = THIS_MODULE, > }; > > +#ifdef CONFIG_OF > +static const struct of_device_id mcp45xx_of_match[] = { Should be named mcp4531_of_match, also the casting to void and then back to an integer type is ugly. Would it work to store a pointer directly into the mcp4531_cfg array instead? I.e. { .compatible = "microchip,mcp4531-502", .data = &mcp4531_cfg[MCP453x_502] }, etc and then adjust accordingly in mcp4531_probe()? That is, if you need this patch at all, see my reply to 2/3... Cheers, Peter > + { .compatible = "microchip,mcp4531-502", .data = (void *)MCP453x_502 }, > + { .compatible = "microchip,mcp4531-103", .data = (void *)MCP453x_103 }, > + { .compatible = "microchip,mcp4531-503", .data = (void *)MCP453x_503 }, > + { .compatible = "microchip,mcp4531-104", .data = (void *)MCP453x_104 }, > + { .compatible = "microchip,mcp4532-502", .data = (void *)MCP453x_502 }, > + { .compatible = "microchip,mcp4532-103", .data = (void *)MCP453x_103 }, > + { .compatible = "microchip,mcp4532-503", .data = (void *)MCP453x_503 }, > + { .compatible = "microchip,mcp4532-104", .data = (void *)MCP453x_104 }, > + { .compatible = "microchip,mcp4541-502", .data = (void *)MCP454x_502 }, > + { .compatible = "microchip,mcp4541-103", .data = (void *)MCP454x_103 }, > + { .compatible = "microchip,mcp4541-503", .data = (void *)MCP454x_503 }, > + { .compatible = "microchip,mcp4541-104", .data = (void *)MCP454x_104 }, > + { .compatible = "microchip,mcp4542-502", .data = (void *)MCP454x_502 }, > + { .compatible = "microchip,mcp4542-103", .data = (void *)MCP454x_103 }, > + { .compatible = "microchip,mcp4542-503", .data = (void *)MCP454x_503 }, > + { .compatible = "microchip,mcp4542-104", .data = (void *)MCP454x_104 }, > + { .compatible = "microchip,mcp4551-502", .data = (void *)MCP455x_502 }, > + { .compatible = "microchip,mcp4551-103", .data = (void *)MCP455x_103 }, > + { .compatible = "microchip,mcp4551-503", .data = (void *)MCP455x_503 }, > + { .compatible = "microchip,mcp4551-104", .data = (void *)MCP455x_104 }, > + { .compatible = "microchip,mcp4552-502", .data = (void *)MCP455x_502 }, > + { .compatible = "microchip,mcp4552-103", .data = (void *)MCP455x_103 }, > + { .compatible = "microchip,mcp4552-503", .data = (void *)MCP455x_503 }, > + { .compatible = "microchip,mcp4552-104", .data = (void *)MCP455x_104 }, > + { .compatible = "microchip,mcp4561-502", .data = (void *)MCP456x_502 }, > + { .compatible = "microchip,mcp4561-103", .data = (void *)MCP456x_103 }, > + { .compatible = "microchip,mcp4561-503", .data = (void *)MCP456x_503 }, > + { .compatible = "microchip,mcp4561-104", .data = (void *)MCP456x_104 }, > + { .compatible = "microchip,mcp4562-502", .data = (void *)MCP456x_502 }, > + { .compatible = "microchip,mcp4562-103", .data = (void *)MCP456x_103 }, > + { .compatible = "microchip,mcp4562-503", .data = (void *)MCP456x_503 }, > + { .compatible = "microchip,mcp4562-104", .data = (void *)MCP456x_104 }, > + { .compatible = "microchip,mcp4631-502", .data = (void *)MCP463x_502 }, > + { .compatible = "microchip,mcp4631-103", .data = (void *)MCP463x_103 }, > + { .compatible = "microchip,mcp4631-503", .data = (void *)MCP463x_503 }, > + { .compatible = "microchip,mcp4631-104", .data = (void *)MCP463x_104 }, > + { .compatible = "microchip,mcp4632-502", .data = (void *)MCP463x_502 }, > + { .compatible = "microchip,mcp4632-103", .data = (void *)MCP463x_103 }, > + { .compatible = "microchip,mcp4632-503", .data = (void *)MCP463x_503 }, > + { .compatible = "microchip,mcp4632-104", .data = (void *)MCP463x_104 }, > + { .compatible = "microchip,mcp4641-502", .data = (void *)MCP464x_502 }, > + { .compatible = "microchip,mcp4641-103", .data = (void *)MCP464x_103 }, > + { .compatible = "microchip,mcp4641-503", .data = (void *)MCP464x_503 }, > + { .compatible = "microchip,mcp4641-104", .data = (void *)MCP464x_104 }, > + { .compatible = "microchip,mcp4642-502", .data = (void *)MCP464x_502 }, > + { .compatible = "microchip,mcp4642-103", .data = (void *)MCP464x_103 }, > + { .compatible = "microchip,mcp4642-503", .data = (void *)MCP464x_503 }, > + { .compatible = "microchip,mcp4642-104", .data = (void *)MCP464x_104 }, > + { .compatible = "microchip,mcp4651-502", .data = (void *)MCP465x_502 }, > + { .compatible = "microchip,mcp4651-103", .data = (void *)MCP465x_103 }, > + { .compatible = "microchip,mcp4651-503", .data = (void *)MCP465x_503 }, > + { .compatible = "microchip,mcp4651-104", .data = (void *)MCP465x_104 }, > + { .compatible = "microchip,mcp4652-502", .data = (void *)MCP465x_502 }, > + { .compatible = "microchip,mcp4652-103", .data = (void *)MCP465x_103 }, > + { .compatible = "microchip,mcp4652-503", .data = (void *)MCP465x_503 }, > + { .compatible = "microchip,mcp4652-104", .data = (void *)MCP465x_104 }, > + { .compatible = "microchip,mcp4661-502", .data = (void *)MCP466x_502 }, > + { .compatible = "microchip,mcp4661-103", .data = (void *)MCP466x_103 }, > + { .compatible = "microchip,mcp4661-503", .data = (void *)MCP466x_503 }, > + { .compatible = "microchip,mcp4661-104", .data = (void *)MCP466x_104 }, > + { .compatible = "microchip,mcp4662-502", .data = (void *)MCP466x_502 }, > + { .compatible = "microchip,mcp4662-103", .data = (void *)MCP466x_103 }, > + { .compatible = "microchip,mcp4662-503", .data = (void *)MCP466x_503 }, > + { .compatible = "microchip,mcp4662-104", .data = (void *)MCP466x_104 }, > + { /*sentinel*/ } > +}; > +#endif > + > static int mcp4531_probe(struct i2c_client *client, > const struct i2c_device_id *id) > { > struct device *dev = &client->dev; > + unsigned long devid; > struct mcp4531_data *data; > struct iio_dev *indio_dev; > + const struct of_device_id *match; > > if (!i2c_check_functionality(client->adapter, > I2C_FUNC_SMBUS_WORD_DATA)) { > @@ -201,13 +275,19 @@ static int mcp4531_probe(struct i2c_client *client, > return -EOPNOTSUPP; > } > > + match = of_match_device(of_match_ptr(mcp45xx_of_match), dev); > + if (match) > + devid = (int)of_device_get_match_data(dev); > + else > + devid = id->driver_data; > + > indio_dev = devm_iio_device_alloc(dev, sizeof(*data)); > if (!indio_dev) > return -ENOMEM; > data = iio_priv(indio_dev); > i2c_set_clientdata(client, indio_dev); > data->client = client; > - data->cfg = &mcp4531_cfg[id->driver_data]; > + data->cfg = &mcp4531_cfg[devid]; > > indio_dev->dev.parent = dev; > indio_dev->info = &mcp4531_info; > @@ -290,6 +370,7 @@ MODULE_DEVICE_TABLE(i2c, mcp4531_id); > static struct i2c_driver mcp4531_driver = { > .driver = { > .name = "mcp4531", > + .of_match_table = of_match_ptr(mcp45xx_of_match), > }, > .probe = mcp4531_probe, > .id_table = mcp4531_id, >