{"id":638515,"url":"http://patchwork.ozlabs.org/api/patches/638515/?format=json","web_url":"http://patchwork.ozlabs.org/project/rtc-linux/patch/1466493770-11895-7-git-send-email-andrew.smirnov@gmail.com/","project":{"id":9,"url":"http://patchwork.ozlabs.org/api/projects/9/?format=json","name":"Linux RTC development","link_name":"rtc-linux","list_id":"linux-rtc.vger.kernel.org","list_email":"linux-rtc@vger.kernel.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<1466493770-11895-7-git-send-email-andrew.smirnov@gmail.com>","list_archive_url":null,"date":"2016-06-21T07:22:41","name":"[v2,08/17] RTC: ds1307: Move chip sanity checking into a separate routine","commit_ref":null,"pull_url":null,"state":"rejected","archived":false,"hash":"e73bb686e37d1c21a3227e026d710ad72eda6951","submitter":{"id":67013,"url":"http://patchwork.ozlabs.org/api/people/67013/?format=json","name":"Andrey Smirnov","email":"andrew.smirnov@gmail.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/rtc-linux/patch/1466493770-11895-7-git-send-email-andrew.smirnov@gmail.com/mbox/","series":[],"comments":"http://patchwork.ozlabs.org/api/patches/638515/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/638515/checks/","tags":{},"related":[],"headers":{"Return-Path":"<rtc-linux+bncBDKOBWPM5ABRBWWWUO5QKGQEQJEYVBI@googlegroups.com>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Received":["from mail-qk0-x23f.google.com (mail-qk0-x23f.google.com\n\t[IPv6:2607:f8b0:400d:c09::23f])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3rYfMc1rvxz9t0S\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 21 Jun 2016 17:23:08 +1000 (AEST)","by mail-qk0-x23f.google.com with SMTP id n132sf3124752qka.0\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 21 Jun 2016 00:23:08 -0700 (PDT)","by 10.107.142.83 with SMTP id q80ls1501051iod.72.gmail; Tue, 21 Jun\n\t2016 00:23:06 -0700 (PDT)","from mail-pf0-x241.google.com (mail-pf0-x241.google.com.\n\t[2607:f8b0:400e:c00::241]) by gmr-mx.google.com with ESMTPS id\n\tpo17si907962pab.2.2016.06.21.00.23.06\n\tfor <rtc-linux@googlegroups.com>\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tTue, 21 Jun 2016 00:23:06 -0700 (PDT)","by mail-pf0-x241.google.com with SMTP id t190so762020pfb.2\n\tfor <rtc-linux@googlegroups.com>;\n\tTue, 21 Jun 2016 00:23:06 -0700 (PDT)","from squirtle.localdomain.localdomain\n\t(c-73-225-163-254.hsd1.wa.comcast.net. [73.225.163.254])\n\tby smtp.gmail.com with ESMTPSA id\n\tp187sm19452396pfg.67.2016.06.21.00.23.04\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tTue, 21 Jun 2016 00:23:04 -0700 (PDT)"],"Authentication-Results":"ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=googlegroups.com header.i=@googlegroups.com\n\theader.b=v35UPFgd; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com header.b=dxGcuRin;\n\tdkim-atps=neutral","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=googlegroups.com; s=20120806;\n\th=sender:mime-version:from:to:cc:subject:date:message-id:in-reply-to\n\t:references:x-original-sender:x-original-authentication-results\n\t:reply-to:precedence:mailing-list:list-id:x-spam-checked-in-group\n\t:list-post:list-help:list-archive:list-subscribe:list-unsubscribe;\n\tbh=L0FrBmQZWBCbw1y+r7Ia+BdYNbhVnAERnD03Ig2Ernc=;\n\tb=v35UPFgdF82b4sNOjTkxRMuX2yePsI9kehrciAJzPOFD1Be0TD5GT5tFhmGNZxyMDx\n\t6A5+d/NFMGkWJnQIQif7YuRNffwF4YdgZj6xf80GAJnyR+wcYYSjFODErxahRjAdWahx\n\ttoCSLLP6nGpYlhwJfDcWD9fa2Z90onAWtPOkJj7OP6LP7rQ04phweQlQ0dJHdB2aSskl\n\t3QJuSNvj3LW3s1lafA4az6qYhNSnJHG8ivFYa5YT4CEphhAiMZ7XdjGSMZTKlaDCKzwF\n\tBxf+4+bWtJhlWQGAAEuazRruXhkqwiMITd/f7AiZVwKcoChbGNllY+0GxE+xluGzzvu4\n\tovZA==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=gmail.com; s=20120113;\n\th=mime-version:from:to:cc:subject:date:message-id:in-reply-to\n\t:references:x-original-sender:x-original-authentication-results\n\t:reply-to:precedence:mailing-list:list-id:x-spam-checked-in-group\n\t:list-post:list-help:list-archive:list-subscribe:list-unsubscribe;\n\tbh=L0FrBmQZWBCbw1y+r7Ia+BdYNbhVnAERnD03Ig2Ernc=;\n\tb=dxGcuRinxdERoWjh7M8rW0Cqwa8KdWePtGfiTgW6T1yytOc3sXr/jzlknDXdIS9Sqv\n\tRvj37ykGwQxHsJ+mp+fR7MA96SsjGxGlflgDsn8EV2P+9PBt8I3aL7wWOPiF78M0xqcs\n\tvCpG2+NRljD8RjgphuEsyh3+T/CmnVSzQyaT3IMA5RuurziYTQrCOX4TFsSi3cd3ZRfp\n\t6QnRmcuLlm6h5x/skBkVGDNGwZ3K+RetMvi6sg6bzA5PY36Q1zkrTNosFeb6E28skyAL\n\tSjqjySYu4uQtbjSjOlHVYYLM94oNJZU5s0au/wYso831mcglw+9TDYZGs1Mif9j8cP0j\n\tYXbw=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20130820;\n\th=sender:x-gm-message-state:mime-version:from:to:cc:subject:date\n\t:message-id:in-reply-to:references:x-original-sender\n\t:x-original-authentication-results:reply-to:precedence:mailing-list\n\t:list-id:x-spam-checked-in-group:list-post:list-help:list-archive\n\t:list-subscribe:list-unsubscribe;\n\tbh=L0FrBmQZWBCbw1y+r7Ia+BdYNbhVnAERnD03Ig2Ernc=;\n\tb=QY2x3HuVOJbAX0y7vfNt9iod/eRqNnrfItkFg6G3GFvF4nqwZtoGMOq+FNmJfMo4hG\n\tQu6z1sdSMj/d5FTWW1tzp63KT3dMOp0AccleVpNTKJg0vrhjLZBH6LLrrYkNSzkdpJ6n\n\tmVlaDN0aYift08OWCG/K5tE82dZV6eSAWr/EGqoYmlXC53xkrwx1FwrnfL5C4tsEZY2x\n\tVPHGnJHJYnNo/uh/tC3JT+4cKyu8ABHMujhbL0zw4I4vZB4YuRevnjGOT6evUFHguVFC\n\tb9d1LDCBG/Xpe0ROhy/n3BPwi4Qkls9RLjq6M0F9zEhpZAvkTmWuEycJ/rn4eTE4pI+q\n\tfvBw==","Sender":"rtc-linux@googlegroups.com","X-Gm-Message-State":"ALyK8tJD/SIWAVfhUOf/v2mr+l+CFkdBgXAZSFt3tV8pVdmCjDWznodOCnz3RQSJl5Rmlw==","X-Received":["by 10.36.204.4 with SMTP id x4mr33106itf.1.1466493786374;\n\tTue, 21 Jun 2016 00:23:06 -0700 (PDT)","by 10.107.162.206 with SMTP id\n\tl197mr25706410ioe.14.1466493786162; \n\tTue, 21 Jun 2016 00:23:06 -0700 (PDT)","by 10.98.43.7 with SMTP id r7mr26682649pfr.65.1466493785878;\n\tTue, 21 Jun 2016 00:23:05 -0700 (PDT)"],"MIME-Version":"1.0","X-BeenThere":"rtc-linux@googlegroups.com","Received-SPF":"pass (google.com: domain of andrew.smirnov@gmail.com\n\tdesignates 2607:f8b0:400e:c00::241 as permitted sender)\n\tclient-ip=2607:f8b0:400e:c00::241; ","From":"Andrey Smirnov <andrew.smirnov@gmail.com>","To":"rtc-linux@googlegroups.com","Cc":"Andrey Smirnov <andrew.smirnov@gmail.com>,\n\tAlessandro Zummo <a.zummo@towertech.it>,\n\tAlexandre Belloni <alexandre.belloni@free-electrons.com>,\n\tlinux-kernel@vger.kernel.org, cphealy@gmail.com","Subject":"[rtc-linux] [PATCH v2 08/17] RTC: ds1307: Move chip sanity checking\n\tinto a separate routine","Date":"Tue, 21 Jun 2016 00:22:41 -0700","Message-Id":"<1466493770-11895-7-git-send-email-andrew.smirnov@gmail.com>","X-Mailer":"git-send-email 2.5.5","In-Reply-To":"<1466493770-11895-1-git-send-email-andrew.smirnov@gmail.com>","References":"<1466493770-11895-1-git-send-email-andrew.smirnov@gmail.com>","X-Original-Sender":"andrew.smirnov@gmail.com","X-Original-Authentication-Results":"gmr-mx.google.com;       dkim=pass\n\theader.i=@gmail.com;       spf=pass (google.com: domain of\n\tandrew.smirnov@gmail.com designates 2607:f8b0:400e:c00::241 as\n\tpermitted\n\tsender) smtp.mailfrom=andrew.smirnov@gmail.com; dmarc=pass (p=NONE\n\tdis=NONE) header.from=gmail.com","Reply-To":"rtc-linux@googlegroups.com","Content-Type":"text/plain; charset=UTF-8","Precedence":"list","Mailing-list":"list rtc-linux@googlegroups.com;\n\tcontact rtc-linux+owners@googlegroups.com","List-ID":"<rtc-linux.googlegroups.com>","X-Spam-Checked-In-Group":"rtc-linux@googlegroups.com","X-Google-Group-Id":"712029733259","List-Post":"<https://groups.google.com/group/rtc-linux/post>,\n\t<mailto:rtc-linux@googlegroups.com>","List-Help":"<https://groups.google.com/support/>,\n\t<mailto:rtc-linux+help@googlegroups.com>","List-Archive":"<https://groups.google.com/group/rtc-linux","List-Subscribe":"<https://groups.google.com/group/rtc-linux/subscribe>,\n\t<mailto:rtc-linux+subscribe@googlegroups.com>","List-Unsubscribe":"<mailto:googlegroups-manage+712029733259+unsubscribe@googlegroups.com>,\n\t<https://groups.google.com/group/rtc-linux/subscribe>"},"content":"Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>\n---\n drivers/rtc/rtc-ds1307.c | 148 +++++++++++++++++++++++++----------------------\n 1 file changed, 79 insertions(+), 69 deletions(-)","diff":"diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c\nindex 4fa09dc..d262db5 100644\n--- a/drivers/rtc/rtc-ds1307.c\n+++ b/drivers/rtc/rtc-ds1307.c\n@@ -1422,79 +1422,20 @@ static int ds1307_chip_configure(struct ds1307 *ds1307)\n \treturn 0;\n }\n \n-static int ds1307_probe(struct i2c_client *client,\n-\t\t\tconst struct i2c_device_id *id)\n+static int ds1307_chip_sanity_check(struct ds1307 *ds1307)\n {\n-\tstruct ds1307\t\t*ds1307;\n-\tint\t\t\terr = -ENODEV;\n-\tint\t\t\ttmp;\n-\tstruct chip_desc\t*chip = &chips[id->driver_data];\n-\tstruct i2c_adapter\t*adapter = to_i2c_adapter(client->dev.parent);\n-\tunsigned char\t\t*buf;\n-\tstruct ds1307_platform_data *pdata = dev_get_platdata(&client->dev);\n-\tirq_handler_t\tirq_handler = ds1307_irq;\n-\n-\tconst struct rtc_class_ops *rtc_ops = &ds13xx_rtc_ops;\n-\n-\tif (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)\n-\t    && !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK))\n-\t\treturn -EIO;\n-\n-\tds1307 = devm_kzalloc(&client->dev, sizeof(struct ds1307), GFP_KERNEL);\n-\tif (!ds1307)\n-\t\treturn -ENOMEM;\n-\n-\ti2c_set_clientdata(client, ds1307);\n-\n-\tds1307->client\t= client;\n-\tds1307->type\t= id->driver_data;\n-\n-\tif (!pdata && client->dev.of_node)\n-\t\tds1307_trickle_of_init(client, chip);\n-\telse if (pdata && pdata->trickle_charger_setup)\n-\t\tchip->trickle_charger_setup = pdata->trickle_charger_setup;\n-\n-\tif (chip->trickle_charger_setup && chip->trickle_charger_reg) {\n-\t\tdev_dbg(&client->dev, \"writing trickle charger info 0x%x to 0x%x\\n\",\n-\t\t    DS13XX_TRICKLE_CHARGER_MAGIC | chip->trickle_charger_setup,\n-\t\t    chip->trickle_charger_reg);\n-\t\ti2c_smbus_write_byte_data(client, chip->trickle_charger_reg,\n-\t\t    DS13XX_TRICKLE_CHARGER_MAGIC |\n-\t\t    chip->trickle_charger_setup);\n-\t}\n+\tint tmp;\n+\tunsigned char *buf;\n+\tstruct i2c_client *client = ds1307->client;\n \n \tbuf = ds1307->regs;\n-\tif (i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK)) {\n-\t\tds1307->read_block_data = ds1307_native_smbus_read_block_data;\n-\t\tds1307->write_block_data = ds1307_native_smbus_write_block_data;\n-\t} else {\n-\t\tds1307->read_block_data = ds1307_read_block_data;\n-\t\tds1307->write_block_data = ds1307_write_block_data;\n-\t}\n-\n-\terr = ds1307_chip_configure(ds1307);\n-\tif (err < 0)\n-\t\treturn err;\n-\n-\tswitch (ds1307->type) {\n-\tcase ds_1388:\n-\t\tds1307->offset = 1; /* Seconds starts at 1 */\n-\t\tbreak;\n-\tcase mcp794xx:\n-\t\trtc_ops = &mcp794xx_rtc_ops;\n-\t\tirq_handler = mcp794xx_irq;\n-\t\tbreak;\n-\tdefault:\n-\t\tbreak;\n-\t}\n \n read_rtc:\n \t/* read RTC registers */\n \ttmp = ds1307->read_block_data(ds1307->client, ds1307->offset, 8, buf);\n \tif (tmp != 8) {\n \t\tdev_dbg(&client->dev, \"read error %d\\n\", tmp);\n-\t\terr = -EIO;\n-\t\tgoto exit;\n+\t\treturn -EIO;\n \t}\n \n \t/*\n@@ -1535,8 +1476,7 @@ read_rtc:\n \t\ttmp = i2c_smbus_read_byte_data(client, DS1340_REG_FLAG);\n \t\tif (tmp < 0) {\n \t\t\tdev_dbg(&client->dev, \"read error %d\\n\", tmp);\n-\t\t\terr = -EIO;\n-\t\t\tgoto exit;\n+\t\t\treturn -EIO;\n \t\t}\n \n \t\t/* oscillator fault?  clear flag, and warn */\n@@ -1566,6 +1506,79 @@ read_rtc:\n \t\tbreak;\n \t}\n \n+\treturn 0;\n+}\n+\n+static int ds1307_probe(struct i2c_client *client,\n+\t\t\tconst struct i2c_device_id *id)\n+{\n+\tstruct ds1307\t\t*ds1307;\n+\tint\t\t\terr = -ENODEV;\n+\tint\t\t\ttmp;\n+\tstruct chip_desc\t*chip = &chips[id->driver_data];\n+\tstruct i2c_adapter\t*adapter = to_i2c_adapter(client->dev.parent);\n+\tunsigned char\t\t*buf;\n+\tstruct ds1307_platform_data *pdata = dev_get_platdata(&client->dev);\n+\tirq_handler_t\tirq_handler = ds1307_irq;\n+\n+\tconst struct rtc_class_ops *rtc_ops = &ds13xx_rtc_ops;\n+\n+\tif (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)\n+\t    && !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK))\n+\t\treturn -EIO;\n+\n+\tds1307 = devm_kzalloc(&client->dev, sizeof(struct ds1307), GFP_KERNEL);\n+\tif (!ds1307)\n+\t\treturn -ENOMEM;\n+\n+\ti2c_set_clientdata(client, ds1307);\n+\n+\tds1307->client\t= client;\n+\tds1307->type\t= id->driver_data;\n+\n+\tif (!pdata && client->dev.of_node)\n+\t\tds1307_trickle_of_init(client, chip);\n+\telse if (pdata && pdata->trickle_charger_setup)\n+\t\tchip->trickle_charger_setup = pdata->trickle_charger_setup;\n+\n+\tif (chip->trickle_charger_setup && chip->trickle_charger_reg) {\n+\t\tdev_dbg(&client->dev, \"writing trickle charger info 0x%x to 0x%x\\n\",\n+\t\t    DS13XX_TRICKLE_CHARGER_MAGIC | chip->trickle_charger_setup,\n+\t\t    chip->trickle_charger_reg);\n+\t\ti2c_smbus_write_byte_data(client, chip->trickle_charger_reg,\n+\t\t    DS13XX_TRICKLE_CHARGER_MAGIC |\n+\t\t    chip->trickle_charger_setup);\n+\t}\n+\n+\tbuf = ds1307->regs;\n+\tif (i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK)) {\n+\t\tds1307->read_block_data = ds1307_native_smbus_read_block_data;\n+\t\tds1307->write_block_data = ds1307_native_smbus_write_block_data;\n+\t} else {\n+\t\tds1307->read_block_data = ds1307_read_block_data;\n+\t\tds1307->write_block_data = ds1307_write_block_data;\n+\t}\n+\n+\terr = ds1307_chip_configure(ds1307);\n+\tif (err < 0)\n+\t\treturn err;\n+\n+\tswitch (ds1307->type) {\n+\tcase ds_1388:\n+\t\tds1307->offset = 1; /* Seconds starts at 1 */\n+\t\tbreak;\n+\tcase mcp794xx:\n+\t\trtc_ops = &mcp794xx_rtc_ops;\n+\t\tirq_handler = mcp794xx_irq;\n+\t\tbreak;\n+\tdefault:\n+\t\tbreak;\n+\t}\n+\n+\terr = ds1307_chip_sanity_check(ds1307);\n+\tif (err < 0)\n+\t\treturn err;\n+\n \ttmp = ds1307->regs[DS1307_REG_HOUR];\n \tswitch (ds1307->type) {\n \tcase ds_1340:\n@@ -1663,9 +1676,6 @@ read_rtc:\n \tds1307_clks_register(ds1307);\n \n \treturn 0;\n-\n-exit:\n-\treturn err;\n }\n \n static int ds1307_remove(struct i2c_client *client)\n","prefixes":["v2","08/17"]}