From patchwork Wed Aug 10 13:54:17 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 73686 Delivered-To: patch@linaro.org Received: by 10.140.29.52 with SMTP id a49csp549984qga; Wed, 10 Aug 2016 12:02:46 -0700 (PDT) X-Received: by 10.66.218.70 with SMTP id pe6mr9889056pac.29.1470855766325; Wed, 10 Aug 2016 12:02:46 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id lu15si49642685pab.140.2016.08.10.12.02.46; Wed, 10 Aug 2016 12:02:46 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S941149AbcHJTCk (ORCPT + 27 others); Wed, 10 Aug 2016 15:02:40 -0400 Received: from mail-wm0-f54.google.com ([74.125.82.54]:35103 "EHLO mail-wm0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S940933AbcHJTC0 (ORCPT ); Wed, 10 Aug 2016 15:02:26 -0400 Received: by mail-wm0-f54.google.com with SMTP id f65so107568918wmi.0 for ; Wed, 10 Aug 2016 12:02:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=NSNCNmtvvCN0vVNvCYF9OLMfztKmbN5YyMUcTgAsvRM=; b=INkkJMdAUzZUbx0mjnxeRLxqdTw/prnjmFcVL6As41l622MoQGRMvzc6BapTsw1q0o 4kCbWCxTHNY+En48oDm5FdmRHNle0V4vyeWGH2ALrhCmnuSTuJ9lCbEKQnNesiq33blx gXZ1B/n18sYkofF1gBF9zQ5M7IwzVSaEwyrwauQdE1dBHTI/TsQfMW4kcXPkFGYpONT5 6VyNZXyyym4JYeV/BuaTgg95KI5q178ocZBqWwPB0rHhdsEjdPdCCWRHjFcXnHz8kJLF kWRlXnZmEBfcwhBx5qWth/pqF2FjpCDKmm+8CAcwGyy3/W1CltlexA9bCBRvn2NREDP7 7ALA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=NSNCNmtvvCN0vVNvCYF9OLMfztKmbN5YyMUcTgAsvRM=; b=iCJ/1tCepq3dFK2+P8MxKVRtlYnhMrcbBrwPvCj/wX0bE6+1KgU5HBpziijdozBkcm SyF5FidYbqB+YK8ESwfa51Ts7XqMHC1d1mJTdf/u2SK+rQP79Wm7UxY/+0B+SPwo0IDu vS1pOq/f3dMysRZxacvDV28U3on0ntx3ZoRHmelIa1SRIu75zh5RWhSnNfzwNZJB6Ska 4HUhvqUKTuIIEcQ4xrh5vzYpEFZBhl42F2+VBAluhzePB/QUzL653FOLL9sumlumGorX ukwl+WFxXNvJfiqXVUu0S16/8poRVTaBvuW84DRwvfeBHcYoTRf6gS0ArWWSHUp/63Bh A1cw== X-Gm-Message-State: AEkooutpad6TqH27oF4jikCj7AyeqbGBS6sUHdrXC5tZsJyFFYkShAitw4bIPABpGBxPcS68 X-Received: by 10.28.15.3 with SMTP id 3mr3203977wmp.31.1470837264906; Wed, 10 Aug 2016 06:54:24 -0700 (PDT) Received: from bgdev-debian.lan (jua06-1-82-242-157-225.fbx.proxad.net. [82.242.157.225]) by smtp.gmail.com with ESMTPSA id va3sm43273263wjb.18.2016.08.10.06.54.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 10 Aug 2016 06:54:24 -0700 (PDT) From: Bartosz Golaszewski To: Wolfram Sang , linux-i2c , LKML Cc: Bartosz Golaszewski Subject: [PATCH] eeprom: at24: check if the chip is functional in probe() Date: Wed, 10 Aug 2016 15:54:17 +0200 Message-Id: <1470837257-15521-1-git-send-email-bgolaszewski@baylibre.com> X-Mailer: git-send-email 2.1.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The at24 driver doesn't check if the chip is functional in its probe function. This leads to instantiating devices that are not physically present. For example the cape EEPROMs for BeagleBone Black are defined in the device tree at four addresses on i2c2, but normally only one of them is present. If the userspace doesn't know the location in advance, it will need to check if reading the nvmem attributes fails to determine which EEPROM is actually there. Try to read a single byte in probe() and bail-out with -ENODEV if the read fails. Signed-off-by: Bartosz Golaszewski --- drivers/misc/eeprom/at24.c | 10 ++++++++++ 1 file changed, 10 insertions(+) -- 2.7.4 diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c index 3cdf8e1..ed1e4eb 100644 --- a/drivers/misc/eeprom/at24.c +++ b/drivers/misc/eeprom/at24.c @@ -593,6 +593,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) struct at24_data *at24; int err; unsigned i, num_addresses; + char c; if (client->dev.platform_data) { chip = *(struct at24_platform_data *)client->dev.platform_data; @@ -780,6 +781,15 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) if (chip.setup) chip.setup(at24->nvmem, chip.context); + err = at24_read(at24, 0, &c, 1); + if (err) { + dev_err(&client->dev, + "error reading the test byte from EEPROM: %d\n", err); + nvmem_unregister(at24->nvmem); + err = -ENODEV; + goto err_clients; + } + return 0; err_clients: