From patchwork Tue Apr 10 13:12:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 896698 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=bgdev-pl.20150623.gappssmtp.com header.i=@bgdev-pl.20150623.gappssmtp.com header.b="hXS1GQKs"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40L6zK6P2Vz9s28 for ; Tue, 10 Apr 2018 23:12:45 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753291AbeDJNMc (ORCPT ); Tue, 10 Apr 2018 09:12:32 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:53071 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753340AbeDJNM0 (ORCPT ); Tue, 10 Apr 2018 09:12:26 -0400 Received: by mail-wm0-f67.google.com with SMTP id g8so25983338wmd.2 for ; Tue, 10 Apr 2018 06:12:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=OnK2CF1wpltVyIMKbj3QOHG6sT1isjxBop3m1WnwOrY=; b=hXS1GQKsbL+H6mYMoKaH75sgLLGHnLsletGjWoLugZfPo3MUyMbtnPY/U4bHD92ZrT WU2f/dP19pL1Xkk4tBxMUz22N6TqhwJJ+FjIH3HWwMer1syyJVjuyp5Owfb0sHK4yJg3 FiliBSuc8DO7R93cGo3qtbeeoiFSFVES19MOycFbS7I/UwIQZJ1rS3bQlY+zGeYyD160 iCnHcVuVUtbpIc1UtG47aoIZKcCqoxXGtAKUD2SKxH6KxOtSE5dVaIWqziAghbch/SFe +vZGPxV/gu0u8edQWIyn4DErQ5M1ZL0y+U+1o7e0xuRZC/7RTcWmxJDDtNzgu9qyh6EJ 7D2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=OnK2CF1wpltVyIMKbj3QOHG6sT1isjxBop3m1WnwOrY=; b=iH/j3UR9Wo/nx3RBOXw1sho4ATBUnWvelg9h4a/agg7CDVC5JX5p2NCzy4ZsjYLmHQ JTqG0LmJXosDLkwqcHhJZUQmvBcgeMpHjwKsiluJSaY0Hk8+vQ/K746EKlNLbJbAVJUR D+aQyX/DCcOpMSYGflUpP5gOqVKGsbDGniZZ1+f8aeF6Q6rqcCbEAdQmZ+pJpHWYLWmR 3ZYVKNMO5TtbQkjjq6DZoWoKMdBpKQWn+jkoiYgP0I1jcP5sXl0i1CQXSaT5zyVFMkri 56AQcdW1oj88XUAy5BLg95T8pQy656/9tLay5H0UuJTeg9vfx7P+B52iUAbDgTqMNuNc Zchg== X-Gm-Message-State: ALQs6tD22ylJgV+vWc+HLuLE3pFmII6hlbxwL2elZA4ZGp0PR0h7Wgpy Ws5JvaXXi/TKnFakFF5l6RsQ0g== X-Google-Smtp-Source: AIpwx4+6rkg1px+besI76JQgQmBLeAf1IbUKRWYZXi72HAo0EYjTm9GaSI1aT8CO3vrfTQLA9p444g== X-Received: by 10.28.114.2 with SMTP id n2mr1831948wmc.134.1523365945570; Tue, 10 Apr 2018 06:12:25 -0700 (PDT) Received: from brgl-bgdev.lan (LFbn-1-7086-217.w90-116.abo.wanadoo.fr. [90.116.254.217]) by smtp.gmail.com with ESMTPSA id m7sm2017660wrb.61.2018.04.10.06.12.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 10 Apr 2018 06:12:24 -0700 (PDT) From: Bartosz Golaszewski To: Andy Shevchenko , Peter Rosin , Sven Van Asbroeck Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 4/4] eeprom: at24: provide a separate routine for creating dummy i2c clients Date: Tue, 10 Apr 2018 15:12:06 +0200 Message-Id: <20180410131206.25760-5-brgl@bgdev.pl> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180410131206.25760-1-brgl@bgdev.pl> References: <20180410131206.25760-1-brgl@bgdev.pl> Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org Move the code responsible for creating the dummy i2c clients used by chips taking multiple slave addresses to a separate function. Signed-off-by: Bartosz Golaszewski --- drivers/misc/eeprom/at24.c | 47 ++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c index c57eaea181d8..0cf79ca4f1bf 100644 --- a/drivers/misc/eeprom/at24.c +++ b/drivers/misc/eeprom/at24.c @@ -540,6 +540,35 @@ static void at24_remove_dummy_clients(struct at24_data *at24) i2c_unregister_device(at24->client[i].client); } +static int at24_make_dummy_client(struct at24_data *at24, unsigned int index, + struct regmap_config *regmap_config) +{ + struct i2c_client *base_client, *dummy_client; + unsigned short int addr; + struct regmap *regmap; + struct device *dev; + + base_client = at24->client[0].client; + dev = &base_client->dev; + addr = base_client->addr + index; + + dummy_client = i2c_new_dummy(base_client->adapter, + base_client->addr + index); + if (!dummy_client) { + dev_err(dev, "address 0x%02x unavailable\n", addr); + return -EADDRINUSE; + } + + regmap = devm_regmap_init_i2c(dummy_client, regmap_config); + if (IS_ERR(regmap)) + return PTR_ERR(regmap); + + at24->client[index].client = dummy_client; + at24->client[index].regmap = regmap; + + return 0; +} + static unsigned int at24_get_offset_adj(u8 flags, unsigned int byte_len) { if (flags & AT24_FLAG_MAC) { @@ -645,20 +674,10 @@ static int at24_probe(struct i2c_client *client) /* use dummy devices for multiple-address chips */ for (i = 1; i < num_addresses; i++) { - at24->client[i].client = i2c_new_dummy(client->adapter, - client->addr + i); - if (!at24->client[i].client) { - dev_err(dev, "address 0x%02x unavailable\n", - client->addr + i); - err = -EADDRINUSE; - goto err_clients; - } - at24->client[i].regmap = devm_regmap_init_i2c( - at24->client[i].client, - ®map_config); - if (IS_ERR(at24->client[i].regmap)) { - err = PTR_ERR(at24->client[i].regmap); - goto err_clients; + err = at24_make_dummy_client(at24, i, ®map_config); + if (err) { + at24_remove_dummy_clients(at24); + return err; } }