2018-07-10 09:56:02

by Denis OSTERLAND-HEIM

[permalink] [raw]
Subject: [PATCH v4 0/5] rtc: isl1208: fixes, documentation and isl1219 support

changes since v3:
Add function to rtc-sysfs to add a group to device groups field,
between alloc and register calls.
Remove isl1208 struct to reduce patch footprint.
Change prefix of defines and functions only available on isl1219.
Use DEVICE_ATTR_RW macro for timestamp0 attribute.
Call validate tm before convert and use unsigned long long cased value.
Add device-tree flag to disable event in pull-up to maximize battery
life time.


Michael Grzeschik (1):
rtc: isl1208: add support for isl1219 with tamper detection

Denis Osterland (4):
rtc: sysfs: facilitate attribute add to rtc device
rtc: isl1208: Add "evdet" interrupt source for isl1219.
rtc: isl1208: set ev-evienb bit from device tree
rtc: isl1219: add device tree docu

.../devicetree/bindings/rtc/isil,isl1219.txt | 29 ++++
drivers/rtc/rtc-core.h | 6 +
drivers/rtc/rtc-isl1208.c | 181 ++++++++++++++++++---
drivers/rtc/rtc-sysfs.c | 39 +++++
4 files changed, 232 insertions(+), 23 deletions(-)

Message-Id: [email protected]





Diehl Connectivity Solutions GmbH
Gesch?ftsf?hrung: Horst Leonberger
Sitz der Gesellschaft: N?rnberg - Registergericht: Amtsgericht
N?rnberg: HRB 32315
___________________________________________________________________________________________________

Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen.
Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht.
Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt.
The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by
mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited.


2018-07-10 09:55:12

by Denis OSTERLAND-HEIM

[permalink] [raw]
Subject: [PATCH v4 4/5] rtc: isl1208: set ev-evienb bit from device tree

From: Denis Osterland <[email protected]>

Add support to disable event in pull-up.

Signed-off-by: Denis Osterland <[email protected]>
---
drivers/rtc/rtc-isl1208.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/rtc/rtc-isl1208.c b/drivers/rtc/rtc-isl1208.c
index bbe08c1ab9f3..2f18ee3c615a 100644
--- a/drivers/rtc/rtc-isl1208.c
+++ b/drivers/rtc/rtc-isl1208.c
@@ -44,6 +44,7 @@
#define ISL1208_REG_INT_IM (1<<7) /* interrupt/alarm mode */
#define ISL1219_REG_EV 0x09
#define ISL1219_REG_EV_EVEN (1<<4) /* event detection enable */
+#define ISL1219_REG_EV_EVIENB (1<<7) /* event in pull-up disable */
#define ISL1208_REG_ATR 0x0a
#define ISL1208_REG_DTR 0x0b

@@ -777,7 +778,10 @@ isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
"please set clock.\n");

if (id->driver_data == TYPE_ISL1219) {
+ struct device_node *np = client->dev.of_node;
rc = ISL1219_REG_EV_EVEN;
+ if (of_get_property(np, "isil,ev-evienb", NULL))
+ rc |= ISL1219_REG_EV_EVIENB;
rc = i2c_smbus_write_byte_data(client, ISL1219_REG_EV, rc);
if (rc < 0) {
dev_err(&client->dev, "could not enable tamper detection\n");
@@ -786,7 +790,7 @@ isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
rc = rtc_add_group(rtc, &isl1219_rtc_sysfs_files);
if (rc)
return rc;
- evdet_irq = of_irq_get_byname(client->dev.of_node, "evdet");
+ evdet_irq = of_irq_get_byname(np, "evdet");
}

rc = sysfs_create_group(&client->dev.kobj, &isl1208_rtc_sysfs_files);
--
2.18.0



Diehl Connectivity Solutions GmbH
Gesch?ftsf?hrung: Horst Leonberger
Sitz der Gesellschaft: N?rnberg - Registergericht: Amtsgericht
N?rnberg: HRB 32315
___________________________________________________________________________________________________

Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen.
Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht.
Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt.
The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by
mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited.

2018-07-10 09:55:21

by Denis OSTERLAND-HEIM

[permalink] [raw]
Subject: [PATCH v4 2/5] rtc: isl1208: add support for isl1219 with tamper detection

From: Michael Grzeschik <[email protected]>

We add support for the ISL1219 chip that got an integrated tamper
detection function. This patch implements the feature by adding
an additional timestamp0 file to sysfs device path.
This file contains seconds since epoch, if an event occurred,
or is empty, if none occurred.

Signed-off-by: Michael Grzeschik <[email protected]>
Signed-off-by: Denis Osterland <[email protected]>
---
drivers/rtc/rtc-isl1208.c | 131 ++++++++++++++++++++++++++++++++++++--
1 file changed, 124 insertions(+), 7 deletions(-)

diff --git a/drivers/rtc/rtc-isl1208.c b/drivers/rtc/rtc-isl1208.c
index 1a2c38cc0178..bb189fe6744a 100644
--- a/drivers/rtc/rtc-isl1208.c
+++ b/drivers/rtc/rtc-isl1208.c
@@ -14,6 +14,7 @@
#include <linux/i2c.h>
#include <linux/bcd.h>
#include <linux/rtc.h>
+#include "rtc-core.h"

/* Register map */
/* rtc section */
@@ -33,13 +34,15 @@
#define ISL1208_REG_SR_ARST (1<<7) /* auto reset */
#define ISL1208_REG_SR_XTOSCB (1<<6) /* crystal oscillator */
#define ISL1208_REG_SR_WRTC (1<<4) /* write rtc */
+#define ISL1208_REG_SR_EVT (1<<3) /* event */
#define ISL1208_REG_SR_ALM (1<<2) /* alarm */
#define ISL1208_REG_SR_BAT (1<<1) /* battery */
#define ISL1208_REG_SR_RTCF (1<<0) /* rtc fail */
#define ISL1208_REG_INT 0x08
#define ISL1208_REG_INT_ALME (1<<6) /* alarm enable */
#define ISL1208_REG_INT_IM (1<<7) /* interrupt/alarm mode */
-#define ISL1208_REG_09 0x09 /* reserved */
+#define ISL1219_REG_EV 0x09
+#define ISL1219_REG_EV_EVEN (1<<4) /* event detection enable */
#define ISL1208_REG_ATR 0x0a
#define ISL1208_REG_DTR 0x0b

@@ -57,8 +60,24 @@
#define ISL1208_REG_USR2 0x13
#define ISL1208_USR_SECTION_LEN 2

+/* event section */
+#define ISL1219_REG_SCT 0x14
+#define ISL1219_REG_MNT 0x15
+#define ISL1219_REG_HRT 0x16
+#define ISL1219_REG_DTT 0x17
+#define ISL1219_REG_MOT 0x18
+#define ISL1219_REG_YRT 0x19
+#define ISL1219_EVT_SECTION_LEN 6
+
static struct i2c_driver isl1208_driver;

+/* ISL1208 various variants */
+enum {
+ TYPE_ISL1208 = 0,
+ TYPE_ISL1218,
+ TYPE_ISL1219,
+};
+
/* block read */
static int
isl1208_i2c_read_regs(struct i2c_client *client, u8 reg, u8 buf[],
@@ -80,8 +99,8 @@ isl1208_i2c_read_regs(struct i2c_client *client, u8 reg, u8 buf[],
};
int ret;

- BUG_ON(reg > ISL1208_REG_USR2);
- BUG_ON(reg + len > ISL1208_REG_USR2 + 1);
+ WARN_ON(reg > ISL1219_REG_YRT);
+ WARN_ON(reg + len > ISL1219_REG_YRT + 1);

ret = i2c_transfer(client->adapter, msgs, 2);
if (ret > 0)
@@ -104,8 +123,8 @@ isl1208_i2c_set_regs(struct i2c_client *client, u8 reg, u8 const buf[],
};
int ret;

- BUG_ON(reg > ISL1208_REG_USR2);
- BUG_ON(reg + len > ISL1208_REG_USR2 + 1);
+ WARN_ON(reg > ISL1219_REG_YRT);
+ WARN_ON(reg + len > ISL1219_REG_YRT + 1);

i2c_buf[0] = reg;
memcpy(&i2c_buf[1], &buf[0], len);
@@ -493,6 +512,73 @@ isl1208_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
return isl1208_i2c_set_alarm(to_i2c_client(dev), alarm);
}

+static ssize_t timestamp0_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct i2c_client *client = dev_get_drvdata(dev);
+ int sr;
+
+ sr = isl1208_i2c_get_sr(client);
+ if (sr < 0) {
+ dev_err(dev, "%s: reading SR failed\n", __func__);
+ return sr;
+ }
+
+ sr &= ~ISL1208_REG_SR_EVT;
+
+ sr = i2c_smbus_write_byte_data(client, ISL1208_REG_SR, sr);
+ if (sr < 0)
+ dev_err(dev, "%s: writing SR failed\n",
+ __func__);
+
+ return count;
+};
+
+static ssize_t timestamp0_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct i2c_client *client = dev_get_drvdata(dev);
+ u8 regs[ISL1219_EVT_SECTION_LEN] = { 0, };
+ struct rtc_time tm;
+ int sr;
+
+ sr = isl1208_i2c_get_sr(client);
+ if (sr < 0) {
+ dev_err(dev, "%s: reading SR failed\n", __func__);
+ return sr;
+ }
+
+ if (!(sr & ISL1208_REG_SR_EVT))
+ return 0;
+
+ sr = isl1208_i2c_read_regs(client, ISL1219_REG_SCT, regs,
+ ISL1219_EVT_SECTION_LEN);
+ if (sr < 0) {
+ dev_err(dev, "%s: reading event section failed\n",
+ __func__);
+ return 0;
+ }
+
+ /* MSB of each alarm register is an enable bit */
+ tm.tm_sec = bcd2bin(regs[ISL1219_REG_SCT - ISL1219_REG_SCT] & 0x7f);
+ tm.tm_min = bcd2bin(regs[ISL1219_REG_MNT - ISL1219_REG_SCT] & 0x7f);
+ tm.tm_hour = bcd2bin(regs[ISL1219_REG_HRT - ISL1219_REG_SCT] & 0x3f);
+ tm.tm_mday = bcd2bin(regs[ISL1219_REG_DTT - ISL1219_REG_SCT] & 0x3f);
+ tm.tm_mon =
+ bcd2bin(regs[ISL1219_REG_MOT - ISL1219_REG_SCT] & 0x1f) - 1;
+ tm.tm_year = bcd2bin(regs[ISL1219_REG_YRT - ISL1219_REG_SCT]) + 100;
+
+ sr = rtc_valid_tm(&tm);
+ if (sr)
+ return sr;
+
+ return sprintf(buf, "%llu\n",
+ (unsigned long long)rtc_tm_to_time64(&tm));
+};
+
+static DEVICE_ATTR_RW(timestamp0);
+
static irqreturn_t
isl1208_rtc_interrupt(int irq, void *data)
{
@@ -538,6 +624,13 @@ isl1208_rtc_interrupt(int irq, void *data)
return err;
}

+ if (sr & ISL1208_REG_SR_EVT) {
+ sysfs_notify(&rtc->dev.kobj, NULL,
+ dev_attr_timestamp0.attr.name);
+ dev_warn(&client->dev, "event detected");
+ handled = 1;
+ }
+
return handled ? IRQ_HANDLED : IRQ_NONE;
}

@@ -623,6 +716,15 @@ static const struct attribute_group isl1208_rtc_sysfs_files = {
.attrs = isl1208_rtc_attrs,
};

+static struct attribute *isl1219_rtc_attrs[] = {
+ &dev_attr_timestamp0.attr,
+ NULL
+};
+
+static const struct attribute_group isl1219_rtc_sysfs_files = {
+ .attrs = isl1219_rtc_attrs,
+};
+
static int
isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
@@ -642,6 +744,7 @@ isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
rtc->ops = &isl1208_rtc_ops;

i2c_set_clientdata(client, rtc);
+ dev_set_drvdata(&rtc->dev, client);

rc = isl1208_i2c_get_sr(client);
if (rc < 0) {
@@ -653,6 +756,18 @@ isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
dev_warn(&client->dev, "rtc power failure detected, "
"please set clock.\n");

+ if (id->driver_data == TYPE_ISL1219) {
+ rc = ISL1219_REG_EV_EVEN;
+ rc = i2c_smbus_write_byte_data(client, ISL1219_REG_EV, rc);
+ if (rc < 0) {
+ dev_err(&client->dev, "could not enable tamper detection\n");
+ return rc;
+ }
+ rc = rtc_add_group(rtc, &isl1219_rtc_sysfs_files);
+ if (rc)
+ return rc;
+ }
+
rc = sysfs_create_group(&client->dev.kobj, &isl1208_rtc_sysfs_files);
if (rc)
return rc;
@@ -686,8 +801,9 @@ isl1208_remove(struct i2c_client *client)
}

static const struct i2c_device_id isl1208_id[] = {
- { "isl1208", 0 },
- { "isl1218", 0 },
+ { "isl1208", TYPE_ISL1208 },
+ { "isl1218", TYPE_ISL1218 },
+ { "isl1219", TYPE_ISL1219 },
{ }
};
MODULE_DEVICE_TABLE(i2c, isl1208_id);
@@ -695,6 +811,7 @@ MODULE_DEVICE_TABLE(i2c, isl1208_id);
static const struct of_device_id isl1208_of_match[] = {
{ .compatible = "isil,isl1208" },
{ .compatible = "isil,isl1218" },
+ { .compatible = "isil,isl1219" },
{ }
};
MODULE_DEVICE_TABLE(of, isl1208_of_match);
--
2.18.0



Diehl Connectivity Solutions GmbH
Gesch?ftsf?hrung: Horst Leonberger
Sitz der Gesellschaft: N?rnberg - Registergericht: Amtsgericht
N?rnberg: HRB 32315
___________________________________________________________________________________________________

Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen.
Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht.
Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt.
The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by
mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited.

2018-07-10 09:55:38

by Denis OSTERLAND-HEIM

[permalink] [raw]
Subject: [PATCH v4 3/5] rtc: isl1208: Add "evdet" interrupt source for isl1219.

From: Denis Osterland <[email protected]>

Add support for "evdet" named interrupt source.

The check if i2c client irq matches evdet irq is needed
for the case that there is only one interrupt named "evdet".
In this case i2c client code handles this like an unnamed
interrupt souce and assigns the value.

Signed-off-by: Denis Osterland <[email protected]>
Reviewed-by: Michael Grzeschik <[email protected]>
---
drivers/rtc/rtc-isl1208.c | 46 +++++++++++++++++++++++++--------------
1 file changed, 30 insertions(+), 16 deletions(-)

diff --git a/drivers/rtc/rtc-isl1208.c b/drivers/rtc/rtc-isl1208.c
index bb189fe6744a..bbe08c1ab9f3 100644
--- a/drivers/rtc/rtc-isl1208.c
+++ b/drivers/rtc/rtc-isl1208.c
@@ -15,6 +15,7 @@
#include <linux/bcd.h>
#include <linux/rtc.h>
#include "rtc-core.h"
+#include <linux/of_irq.h>

/* Register map */
/* rtc section */
@@ -725,11 +726,30 @@ static const struct attribute_group isl1219_rtc_sysfs_files = {
.attrs = isl1219_rtc_attrs,
};

+static int isl1208_setup_irq(struct i2c_client *client, int irq)
+{
+ int rc = devm_request_threaded_irq(&client->dev, irq, NULL,
+ isl1208_rtc_interrupt,
+ IRQF_SHARED | IRQF_ONESHOT,
+ isl1208_driver.driver.name,
+ client);
+ if (!rc) {
+ device_init_wakeup(&client->dev, 1);
+ enable_irq_wake(irq);
+ } else {
+ dev_err(&client->dev,
+ "Unable to request irq %d, no alarm support\n",
+ irq);
+ }
+ return rc;
+}
+
static int
isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
int rc = 0;
struct rtc_device *rtc;
+ int evdet_irq = -1;

if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
return -ENODEV;
@@ -766,28 +786,22 @@ isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
rc = rtc_add_group(rtc, &isl1219_rtc_sysfs_files);
if (rc)
return rc;
+ evdet_irq = of_irq_get_byname(client->dev.of_node, "evdet");
}

rc = sysfs_create_group(&client->dev.kobj, &isl1208_rtc_sysfs_files);
if (rc)
return rc;

- if (client->irq > 0) {
- rc = devm_request_threaded_irq(&client->dev, client->irq, NULL,
- isl1208_rtc_interrupt,
- IRQF_SHARED | IRQF_ONESHOT,
- isl1208_driver.driver.name,
- client);
- if (!rc) {
- device_init_wakeup(&client->dev, 1);
- enable_irq_wake(client->irq);
- } else {
- dev_err(&client->dev,
- "Unable to request irq %d, no alarm support\n",
- client->irq);
- client->irq = 0;
- }
- }
+ if (client->irq > 0)
+ rc = isl1208_setup_irq(client, client->irq);
+ if (rc)
+ return rc;
+
+ if (evdet_irq > 0 && evdet_irq != client->irq)
+ rc = isl1208_setup_irq(client, evdet_irq);
+ if (rc)
+ return rc;

return rtc_register_device(rtc);
}
--
2.18.0



Diehl Connectivity Solutions GmbH
Gesch?ftsf?hrung: Horst Leonberger
Sitz der Gesellschaft: N?rnberg - Registergericht: Amtsgericht
N?rnberg: HRB 32315
___________________________________________________________________________________________________

Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen.
Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht.
Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt.
The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by
mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited.

2018-07-10 09:56:24

by Denis OSTERLAND-HEIM

[permalink] [raw]
Subject: [PATCH v4 1/5] rtc: sysfs: facilitate attribute add to rtc device

From: Denis Osterland <[email protected]>

This patches addresses following problem:
rtc_allocate_device
devm_device_add_group <-- kernel oops / null pointer, because
sysfs entry does not yet exist
rtc_register_device
rc = devm_device_add_group
if (rc)
return rc; <-- forbidden to return error code
after device register

In case groups were not yet registered (kobj.state_in_sysfs == 0)
rtc_add_group just addes given group to dev.groups,
otherwise it uses devm_device_add_group.

Signed-off-by: Denis Osterland <[email protected]>
---
drivers/rtc/rtc-core.h | 6 ++++++
drivers/rtc/rtc-sysfs.c | 39 +++++++++++++++++++++++++++++++++++++++
2 files changed, 45 insertions(+)

diff --git a/drivers/rtc/rtc-core.h b/drivers/rtc/rtc-core.h
index 0abf98983e13..81d1c3ce7a96 100644
--- a/drivers/rtc/rtc-core.h
+++ b/drivers/rtc/rtc-core.h
@@ -40,9 +40,15 @@ static inline void rtc_proc_del_device(struct rtc_device *rtc)

#ifdef CONFIG_RTC_INTF_SYSFS
const struct attribute_group **rtc_get_dev_attribute_groups(void);
+int rtc_add_group(struct rtc_device *rtc, const struct attribute_group *grp);
#else
static inline const struct attribute_group **rtc_get_dev_attribute_groups(void)
{
return NULL;
}
+static inline
+int rtc_add_group(struct rtc_device *rtc, const struct attribute_group *grp)
+{
+ return 0;
+}
#endif
diff --git a/drivers/rtc/rtc-sysfs.c b/drivers/rtc/rtc-sysfs.c
index 454da38c6012..9a177b8f761b 100644
--- a/drivers/rtc/rtc-sysfs.c
+++ b/drivers/rtc/rtc-sysfs.c
@@ -317,3 +317,42 @@ const struct attribute_group **rtc_get_dev_attribute_groups(void)
{
return rtc_attr_groups;
}
+
+static size_t rtc_group_count(struct rtc_device *rtc)
+{
+ const struct attribute_group **groups = rtc->dev.groups;
+ size_t cnt = 0;
+
+ if (groups)
+ for (; *groups; groups++)
+ cnt++;
+
+ return cnt;
+}
+
+static inline int
+__rtc_add_group(struct rtc_device *rtc, const struct attribute_group *grp)
+{
+ size_t cnt = rtc_group_count(rtc);
+ const struct attribute_group **groups, **old;
+
+ groups = devm_kzalloc(&rtc->dev, (cnt+2)*sizeof(*groups), GFP_KERNEL);
+ if (IS_ERR_OR_NULL(groups))
+ return PTR_ERR(groups);
+ memcpy(groups, rtc->dev.groups, cnt*sizeof(*groups));
+ groups[cnt] = grp;
+
+ old = rtc->dev.groups;
+ rtc->dev.groups = groups;
+ if (old != rtc_attr_groups)
+ devm_kfree(&rtc->dev, old);
+
+ return 0;
+}
+
+int rtc_add_group(struct rtc_device *rtc, const struct attribute_group *grp)
+{
+ return rtc->dev.kobj.state_in_sysfs ?
+ devm_device_add_group(&rtc->dev, grp) :
+ __rtc_add_group(rtc, grp);
+}
--
2.18.0



Diehl Connectivity Solutions GmbH
Gesch?ftsf?hrung: Horst Leonberger
Sitz der Gesellschaft: N?rnberg - Registergericht: Amtsgericht
N?rnberg: HRB 32315
___________________________________________________________________________________________________

Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen.
Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht.
Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt.
The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by
mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited.

2018-07-10 09:56:33

by Denis OSTERLAND-HEIM

[permalink] [raw]
Subject: [PATCH v4 5/5] rtc: isl1219: add device tree docu

From: Denis Osterland <[email protected]>

The devicetree documentation for the ISL1219 device tree
binding is added with an short example. It is not a trivial
device, because it supports two interrupt souces.

Signed-off-by: Denis Osterland <[email protected]>
---
.../devicetree/bindings/rtc/isil,isl1219.txt | 29 +++++++++++++++++++
1 file changed, 29 insertions(+)
create mode 100644 Documentation/devicetree/bindings/rtc/isil,isl1219.txt

diff --git a/Documentation/devicetree/bindings/rtc/isil,isl1219.txt b/Documentation/devicetree/bindings/rtc/isil,isl1219.txt
new file mode 100644
index 000000000000..f26f1e9d4bde
--- /dev/null
+++ b/Documentation/devicetree/bindings/rtc/isil,isl1219.txt
@@ -0,0 +1,29 @@
+Intersil ISL1219 I2C RTC/Alarm chip with event in
+
+ISL1219 has additional pins EVIN and #EVDET for tamper detection.
+
+Required properties supported by the device:
+
+ - "compatible": must be "isil,isl1219"
+ - "reg": I2C bus address of the device
+
+Optional properties:
+
+ - "interrupt-names": list which may contains "irq" and "evdet"
+ - "interrupt-parent", "interrupts", "interrupts-extended":
+ for passing the interrupt line of the SoC connected to #IRQ pin
+ and #EVDET pin of the RTC chip.
+ - "isil,ev-evienb": if present bit can be set to disable event input pull-up
+
+
+Example isl1219 node with #IRQ pin connected to SoC gpio1 pin12
+ and #EVDET pin connected to SoC gpio2 pin 24:
+
+ isl1219: rtc@68 {
+ compatible = "isil,isl1219";
+ reg = <0x68>;
+ interrupt-names = "irq", "evdet";
+ interrupts-extended = <&gpio1 12 IRQ_TYPE_EDGE_FALLING>,
+ <&gpio2 24 IRQ_TYPE_EDGE_FALLING>;
+ };
+
--
2.18.0



Diehl Connectivity Solutions GmbH
Gesch?ftsf?hrung: Horst Leonberger
Sitz der Gesellschaft: N?rnberg - Registergericht: Amtsgericht
N?rnberg: HRB 32315
___________________________________________________________________________________________________

Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen.
Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht.
Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt.
The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by
mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited.

2018-07-10 13:22:38

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v4 2/5] rtc: isl1208: add support for isl1219 with tamper detection

Hi Michael,

I love your patch! Yet something to improve:

[auto build test ERROR on abelloni/rtc-next]
[also build test ERROR on v4.18-rc4 next-20180709]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Denis-OSTERLAND/rtc-isl1208-fixes-documentation-and-isl1219-support/20180710-181709
base: https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git rtc-next
config: x86_64-randconfig-s4-07101857 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64

All errors (new ones prefixed by >>):

>> ERROR: "rtc_add_group" [drivers/rtc/rtc-isl1208.ko] undefined!

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation


Attachments:
(No filename) (955.00 B)
.config.gz (26.89 kB)
Download all attachments

2018-07-10 14:08:58

by Denis OSTERLAND-HEIM

[permalink] [raw]
Subject: Re: [PATCH v4 2/5] rtc: isl1208: add support for isl1219 with tamper detection

Hi,

seems 2/5 was applied before 1/5.
1/5 introduces rtc_add_group.

Regards Denis

Am Dienstag, den 10.07.2018, 21:20 +0800 schrieb kbuild test robot:
> Hi Michael,
>
> I love your patch! Yet something to improve:
>
> [auto build test ERROR on abelloni/rtc-next]
> [also build test ERROR on v4.18-rc4 next-20180709]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>
> url:    https://github.com/0day-ci/linux/commits/Denis-OSTERLAND/rtc-isl1208-fixes-documentation-and-isl1219-support/20180710-181709
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git rtc-next
> config: x86_64-randconfig-s4-07101857 (attached as .config)
> compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
> reproduce:
>         # save the attached .config to linux build tree
>         make ARCH=x86_64 
>
> All errors (new ones prefixed by >>):
>
> >
> > >
> > > ERROR: "rtc_add_group" [drivers/rtc/rtc-isl1208.ko] undefined!
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Diehl Connectivity Solutions GmbH
Geschäftsführung: Horst Leonberger
Sitz der Gesellschaft: Nürnberg - Registergericht: Amtsgericht
Nürnberg: HRB 32315
___________________________________________________________________________________________________

Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen.
Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht.
Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt.
The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by
mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited.

2018-07-11 06:06:42

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v4 2/5] rtc: isl1208: add support for isl1219 with tamper detection

Hi, Denis

The patch was applied in correct sequence as you can see in the github link.

I think the question here is rtc-isl1208 can be built as a built-in module,
but it would fail if it was built as a ko.

Thanks,
Xiaolong

On 07/10, Denis OSTERLAND wrote:
>Hi,
>
>seems 2/5 was applied before 1/5.
>1/5 introduces rtc_add_group.
>
>Regards Denis
>
>Am Dienstag, den 10.07.2018, 21:20 +0800 schrieb kbuild test robot:
>> Hi Michael,
>>
>> I love your patch! Yet something to improve:
>>
>> [auto build test ERROR on abelloni/rtc-next]
>> [also build test ERROR on v4.18-rc4 next-20180709]
>> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>>
>> url:????https://github.com/0day-ci/linux/commits/Denis-OSTERLAND/rtc-isl1208-fixes-documentation-and-isl1219-support/20180710-181709
>> base:???https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git rtc-next
>> config: x86_64-randconfig-s4-07101857 (attached as .config)
>> compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
>> reproduce:
>> ????????# save the attached .config to linux build tree
>> ????????make ARCH=x86_64?
>>
>> All errors (new ones prefixed by >>):
>>
>> >
>> > >
>> > > ERROR: "rtc_add_group" [drivers/rtc/rtc-isl1208.ko] undefined!
>> ---
>> 0-DAY kernel test infrastructure????????????????Open Source Technology Center
>> https://lists.01.org/pipermail/kbuild-all???????????????????Intel Corporation
>
>Diehl Connectivity Solutions GmbH
>Gesch?ftsf?hrung: Horst Leonberger
>Sitz der Gesellschaft: N?rnberg - Registergericht: Amtsgericht
>N?rnberg: HRB 32315
>___________________________________________________________________________________________________
>
>Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen.
>Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht.
>Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt.
>The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by
>mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited.

2018-07-11 21:02:23

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH v4 5/5] rtc: isl1219: add device tree docu

On Tue, Jul 10, 2018 at 09:44:15AM +0000, Denis OSTERLAND wrote:
> From: Denis Osterland <[email protected]>
>
> The devicetree documentation for the ISL1219 device tree
> binding is added with an short example. It is not a trivial
> device, because it supports two interrupt souces.

s/souces/sources/

>
> Signed-off-by: Denis Osterland <[email protected]>
> ---
> .../devicetree/bindings/rtc/isil,isl1219.txt | 29 +++++++++++++++++++
> 1 file changed, 29 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/rtc/isil,isl1219.txt
>
> diff --git a/Documentation/devicetree/bindings/rtc/isil,isl1219.txt b/Documentation/devicetree/bindings/rtc/isil,isl1219.txt
> new file mode 100644
> index 000000000000..f26f1e9d4bde
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/rtc/isil,isl1219.txt
> @@ -0,0 +1,29 @@
> +Intersil ISL1219 I2C RTC/Alarm chip with event in
> +
> +ISL1219 has additional pins EVIN and #EVDET for tamper detection.
> +
> +Required properties supported by the device:
> +
> + - "compatible": must be "isil,isl1219"
> + - "reg": I2C bus address of the device
> +
> +Optional properties:
> +
> + - "interrupt-names": list which may contains "irq" and "evdet"
> + - "interrupt-parent", "interrupts", "interrupts-extended":
> + for passing the interrupt line of the SoC connected to #IRQ pin
> + and #EVDET pin of the RTC chip.

Just list 'interrupts' and how many there are. interrupt-parent is
implied and may be in a parent node. interrupts-extended is also
implicitly allowed as needed.

> + - "isil,ev-evienb": if present bit can be set to disable event input pull-up
> +
> +
> +Example isl1219 node with #IRQ pin connected to SoC gpio1 pin12
> + and #EVDET pin connected to SoC gpio2 pin 24:
> +
> + isl1219: rtc@68 {
> + compatible = "isil,isl1219";
> + reg = <0x68>;
> + interrupt-names = "irq", "evdet";
> + interrupts-extended = <&gpio1 12 IRQ_TYPE_EDGE_FALLING>,
> + <&gpio2 24 IRQ_TYPE_EDGE_FALLING>;
> + };
> +
> --
> 2.18.0
>
>
>
> Diehl Connectivity Solutions GmbH
> Gesch?ftsf?hrung: Horst Leonberger
> Sitz der Gesellschaft: N?rnberg - Registergericht: Amtsgericht
> N?rnberg: HRB 32315
> ___________________________________________________________________________________________________
>
> Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen.
> Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht.
> Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt.
> The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by
> mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited.

2018-07-12 06:53:04

by Denis OSTERLAND-HEIM

[permalink] [raw]
Subject: Re: [PATCH v4 5/5] rtc: isl1219: add device tree docu

Am Mittwoch, den 11.07.2018, 09:16 -0600 schrieb Rob Herring:
> On Tue, Jul 10, 2018 at 09:44:15AM +0000, Denis OSTERLAND wrote:
> >
> > From: Denis Osterland <[email protected]>
> >
> > The devicetree documentation for the ISL1219 device tree
> > binding is added with an short example. It is not a trivial
> > device, because it supports two interrupt souces.
> s/souces/sources/
OK
>
> >
> >
> > Signed-off-by: Denis Osterland <[email protected]>
> > ---
> >  .../devicetree/bindings/rtc/isil,isl1219.txt  | 29 +++++++++++++++++++
> >  1 file changed, 29 insertions(+)
> >  create mode 100644 Documentation/devicetree/bindings/rtc/isil,isl1219.txt
> >
> > diff --git a/Documentation/devicetree/bindings/rtc/isil,isl1219.txt b/Documentation/devicetree/bindings/rtc/isil,isl1219.txt
> > new file mode 100644
> > index 000000000000..f26f1e9d4bde
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/rtc/isil,isl1219.txt
> > @@ -0,0 +1,29 @@
> > +Intersil ISL1219 I2C RTC/Alarm chip with event in
> > +
> > +ISL1219 has additional pins EVIN and #EVDET for tamper detection.
> > +
> > +Required properties supported by the device:
> > +
> > + - "compatible": must be "isil,isl1219"
> > + - "reg": I2C bus address of the device
> > +
> > +Optional properties:
> > +
> > + - "interrupt-names": list which may contains "irq" and "evdet"
> > + - "interrupt-parent", "interrupts", "interrupts-extended":
> > +   for passing the interrupt line of the SoC connected to #IRQ pin
> > +   and #EVDET pin of the RTC chip.
> Just list 'interrupts' and how many there are. interrupt-parent is 
> implied and may be in a parent node. interrupts-extended is also 
> implicitly allowed as needed.
Will change to: "interrupts": list of interrupts for "irq" and "evdet"
>
> >
> > + - "isil,ev-evienb": if present bit can be set to disable event input pull-up
> > +
> > +
> > +Example isl1219 node with #IRQ pin connected to SoC gpio1 pin12
> > + and #EVDET pin connected to SoC gpio2 pin 24:
> > +
> > + isl1219: rtc@68 {
> > + compatible = "isil,isl1219";
> > + reg = <0x68>;
> > + interrupt-names = "irq", "evdet";
> > + interrupts-extended = <&gpio1 12 IRQ_TYPE_EDGE_FALLING>,
> > + <&gpio2 24 IRQ_TYPE_EDGE_FALLING>;
> > + };
> > +
> > --
> > 2.18.0
> >
> >
> >
> > Diehl Connectivity Solutions GmbH
> > Geschäftsführung: Horst Leonberger
> > Sitz der Gesellschaft: Nürnberg - Registergericht: Amtsgericht
> > Nürnberg: HRB 32315
> > ___________________________________________________________________________________________________
> >
> > Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen.
> > Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht.
> > Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt.
> > The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by
> > mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited.

Diehl Connectivity Solutions GmbH
Geschäftsführung: Horst Leonberger
Sitz der Gesellschaft: Nürnberg - Registergericht: Amtsgericht
Nürnberg: HRB 32315
___________________________________________________________________________________________________

Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen.
Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht.
Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt.
The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by
mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited.

2018-07-18 07:28:00

by Alexandre Belloni

[permalink] [raw]
Subject: Re: [PATCH v4 1/5] rtc: sysfs: facilitate attribute add to rtc device

Hello,

On 10/07/2018 09:44:15+0000, Denis OSTERLAND wrote:
> From: Denis Osterland <[email protected]>
>
> This patches addresses following problem:
> rtc_allocate_device
> devm_device_add_group <-- kernel oops / null pointer, because
> sysfs entry does not yet exist
> rtc_register_device
> rc = devm_device_add_group
> if (rc)
> return rc; <-- forbidden to return error code
> after device register
>
> In case groups were not yet registered (kobj.state_in_sysfs == 0)
> rtc_add_group just addes given group to dev.groups,
> otherwise it uses devm_device_add_group.
>
> Signed-off-by: Denis Osterland <[email protected]>
> ---
> drivers/rtc/rtc-core.h | 6 ++++++
> drivers/rtc/rtc-sysfs.c | 39 +++++++++++++++++++++++++++++++++++++++
> 2 files changed, 45 insertions(+)
>
> diff --git a/drivers/rtc/rtc-core.h b/drivers/rtc/rtc-core.h
> index 0abf98983e13..81d1c3ce7a96 100644
> --- a/drivers/rtc/rtc-core.h
> +++ b/drivers/rtc/rtc-core.h
> @@ -40,9 +40,15 @@ static inline void rtc_proc_del_device(struct rtc_device *rtc)
>
> #ifdef CONFIG_RTC_INTF_SYSFS
> const struct attribute_group **rtc_get_dev_attribute_groups(void);
> +int rtc_add_group(struct rtc_device *rtc, const struct attribute_group *grp);
> #else
> static inline const struct attribute_group **rtc_get_dev_attribute_groups(void)
> {
> return NULL;
> }
> +static inline
> +int rtc_add_group(struct rtc_device *rtc, const struct attribute_group *grp)
> +{
> + return 0;
> +}
> #endif
> diff --git a/drivers/rtc/rtc-sysfs.c b/drivers/rtc/rtc-sysfs.c
> index 454da38c6012..9a177b8f761b 100644
> --- a/drivers/rtc/rtc-sysfs.c
> +++ b/drivers/rtc/rtc-sysfs.c
> @@ -317,3 +317,42 @@ const struct attribute_group **rtc_get_dev_attribute_groups(void)
> {
> return rtc_attr_groups;
> }
> +
> +static size_t rtc_group_count(struct rtc_device *rtc)
> +{

I don't feel this function is necessary, you can include it in __rtc_add_group

> + const struct attribute_group **groups = rtc->dev.groups;
> + size_t cnt = 0;
> +
> + if (groups)
> + for (; *groups; groups++)
> + cnt++;
> +
> + return cnt;
> +}
> +
> +static inline int
> +__rtc_add_group(struct rtc_device *rtc, const struct attribute_group *grp)
> +{
> + size_t cnt = rtc_group_count(rtc);
> + const struct attribute_group **groups, **old;
> +
> + groups = devm_kzalloc(&rtc->dev, (cnt+2)*sizeof(*groups), GFP_KERNEL);

Please use devm_kcalloc

> + if (IS_ERR_OR_NULL(groups))
> + return PTR_ERR(groups);
> + memcpy(groups, rtc->dev.groups, cnt*sizeof(*groups));
> + groups[cnt] = grp;
> +
> + old = rtc->dev.groups;
> + rtc->dev.groups = groups;
> + if (old != rtc_attr_groups)
> + devm_kfree(&rtc->dev, old);
> +
> + return 0;
> +}
> +
> +int rtc_add_group(struct rtc_device *rtc, const struct attribute_group *grp)
> +{
> + return rtc->dev.kobj.state_in_sysfs ?
> + devm_device_add_group(&rtc->dev, grp) :
> + __rtc_add_group(rtc, grp);

Using devm_device_add_group after RTC registration is racy and should
not be allowed. I would merge __rtc_add_group in rtc_add_group and
return an error if rtc->registered is true.


--
Alexandre Belloni, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

2018-07-18 07:40:46

by Alexandre Belloni

[permalink] [raw]
Subject: Re: [PATCH v4 5/5] rtc: isl1219: add device tree docu

Hi,

On 10/07/2018 09:44:15+0000, Denis OSTERLAND wrote:
> From: Denis Osterland <[email protected]>
>
> The devicetree documentation for the ISL1219 device tree
> binding is added with an short example. It is not a trivial
> device, because it supports two interrupt souces.
>
> Signed-off-by: Denis Osterland <[email protected]>
> ---
> .../devicetree/bindings/rtc/isil,isl1219.txt | 29 +++++++++++++++++++
> 1 file changed, 29 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/rtc/isil,isl1219.txt
>
> diff --git a/Documentation/devicetree/bindings/rtc/isil,isl1219.txt b/Documentation/devicetree/bindings/rtc/isil,isl1219.txt
> new file mode 100644
> index 000000000000..f26f1e9d4bde
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/rtc/isil,isl1219.txt
> @@ -0,0 +1,29 @@
> +Intersil ISL1219 I2C RTC/Alarm chip with event in
> +
> +ISL1219 has additional pins EVIN and #EVDET for tamper detection.
> +
> +Required properties supported by the device:
> +
> + - "compatible": must be "isil,isl1219"
> + - "reg": I2C bus address of the device
> +
> +Optional properties:
> +
> + - "interrupt-names": list which may contains "irq" and "evdet"
> + - "interrupt-parent", "interrupts", "interrupts-extended":
> + for passing the interrupt line of the SoC connected to #IRQ pin
> + and #EVDET pin of the RTC chip.
> + - "isil,ev-evienb": if present bit can be set to disable event input pull-up

I would use a clearer name for that property like isil,ev-pull-up-enabled.

Also make it an int so 0 is disabling the pull-up (EVIENB set to 1) 1 is
enabling the pull-up (EVIENB set to 0) and do nothing when the property
is not present.


--
Alexandre Belloni, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

2018-07-18 07:49:12

by Denis OSTERLAND-HEIM

[permalink] [raw]
Subject: Re: [PATCH v4 1/5] rtc: sysfs: facilitate attribute add to rtc device

Hello,

thanks for your comments.

Am Mittwoch, den 18.07.2018, 09:25 +0200 schrieb Alexandre Belloni:
> Hello,
>
> On 10/07/2018 09:44:15+0000, Denis OSTERLAND wrote:
> > 
> > +
> > +static size_t rtc_group_count(struct rtc_device *rtc)
> > +{
> I don't feel this function is necessary, you can include it in __rtc_add_group
I think that it is easier to read, but sure I can include it.
>
> >
> > +
> > +static inline int
> > +__rtc_add_group(struct rtc_device *rtc, const struct attribute_group *grp)
> > +{
> > + size_t cnt = rtc_group_count(rtc);
> > + const struct attribute_group **groups, **old;
> > +
> > + groups = devm_kzalloc(&rtc->dev, (cnt+2)*sizeof(*groups), GFP_KERNEL);
> Please use devm_kcalloc
okay
>
> >
> > + if (IS_ERR_OR_NULL(groups))
> > + return PTR_ERR(groups);
> > + memcpy(groups, rtc->dev.groups, cnt*sizeof(*groups));
> > + groups[cnt] = grp;
> > +
> > + old = rtc->dev.groups;
> > + rtc->dev.groups = groups;
> > + if (old != rtc_attr_groups)
> > + devm_kfree(&rtc->dev, old);
> > +
> > + return 0;
> > +}
> > +
> > +int rtc_add_group(struct rtc_device *rtc, const struct attribute_group *grp)
> > +{
> > + return rtc->dev.kobj.state_in_sysfs ?
> > + devm_device_add_group(&rtc->dev, grp) :
> > + __rtc_add_group(rtc, grp);
> Using devm_device_add_group after RTC registration is racy and should
> not be allowed. I would merge __rtc_add_group in rtc_add_group and
> return an error if rtc->registered is true.
You are right. An error in this case is better.
>
>

Regards Denis

Diehl Connectivity Solutions GmbH
Geschäftsführung: Horst Leonberger
Sitz der Gesellschaft: Nürnberg - Registergericht: Amtsgericht
Nürnberg: HRB 32315
___________________________________________________________________________________________________

Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen.
Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht.
Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt.
The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by
mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited.

2018-07-18 07:56:23

by Denis OSTERLAND-HEIM

[permalink] [raw]
Subject: Re: [PATCH v4 5/5] rtc: isl1219: add device tree docu

Hello,

Am Mittwoch, den 18.07.2018, 09:38 +0200 schrieb Alexandre Belloni:
> Hi,
>
> On 10/07/2018 09:44:15+0000, Denis OSTERLAND wrote:
> > 
> > +
> > +Optional properties:
> > +
> > + - "interrupt-names": list which may contains "irq" and "evdet"
> > + - "interrupt-parent", "interrupts", "interrupts-extended":
> > +   for passing the interrupt line of the SoC connected to #IRQ pin
> > +   and #EVDET pin of the RTC chip.
> > + - "isil,ev-evienb": if present bit can be set to disable event input pull-up
> I would use a clearer name for that property like isil,ev-pull-up-enabled.
>
> Also make it an int so 0 is disabling the pull-up (EVIENB set to 1) 1 is
> enabling the pull-up (EVIENB set to 0) and do nothing when the property
> is not present.
It is designed like Documentation/devicetree/bindings/rtc/isil,isl12026.txt,
which uses the bit name from Documentation as well.
I will change to integer type.
>
>
Regards Denis

Diehl Connectivity Solutions GmbH
Geschäftsführung: Horst Leonberger
Sitz der Gesellschaft: Nürnberg - Registergericht: Amtsgericht
Nürnberg: HRB 32315
___________________________________________________________________________________________________

Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen.
Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht.
Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt.
The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by
mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited.

2018-07-18 08:15:37

by Alexandre Belloni

[permalink] [raw]
Subject: Re: [PATCH v4 2/5] rtc: isl1208: add support for isl1219 with tamper detection

On 10/07/2018 09:44:15+0000, Denis OSTERLAND wrote:
> static int
> isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
> {
> @@ -642,6 +744,7 @@ isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
> rtc->ops = &isl1208_rtc_ops;
>
> i2c_set_clientdata(client, rtc);
> + dev_set_drvdata(&rtc->dev, client);
>
> rc = isl1208_i2c_get_sr(client);
> if (rc < 0) {
> @@ -653,6 +756,18 @@ isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
> dev_warn(&client->dev, "rtc power failure detected, "
> "please set clock.\n");
>
> + if (id->driver_data == TYPE_ISL1219) {
> + rc = ISL1219_REG_EV_EVEN;
> + rc = i2c_smbus_write_byte_data(client, ISL1219_REG_EV, rc);

I'd pass ISL1219_REG_EV_EVEN directly instead of assigning it to rc.

> + if (rc < 0) {
> + dev_err(&client->dev, "could not enable tamper detection\n");
> + return rc;
> + }
> + rc = rtc_add_group(rtc, &isl1219_rtc_sysfs_files);
> + if (rc)
> + return rc;
> + }
> +
> rc = sysfs_create_group(&client->dev.kobj, &isl1208_rtc_sysfs_files);
> if (rc)
> return rc;
> @@ -686,8 +801,9 @@ isl1208_remove(struct i2c_client *client)
> }
>
> static const struct i2c_device_id isl1208_id[] = {
> - { "isl1208", 0 },
> - { "isl1218", 0 },
> + { "isl1208", TYPE_ISL1208 },
> + { "isl1218", TYPE_ISL1218 },
> + { "isl1219", TYPE_ISL1219 },
> { }
> };
> MODULE_DEVICE_TABLE(i2c, isl1208_id);
> @@ -695,6 +811,7 @@ MODULE_DEVICE_TABLE(i2c, isl1208_id);
> static const struct of_device_id isl1208_of_match[] = {
> { .compatible = "isil,isl1208" },
> { .compatible = "isil,isl1218" },
> + { .compatible = "isil,isl1219" },
> { }
> };
> MODULE_DEVICE_TABLE(of, isl1208_of_match);
> --
> 2.18.0
>
>
>
> Diehl Connectivity Solutions GmbH
> Gesch?ftsf?hrung: Horst Leonberger
> Sitz der Gesellschaft: N?rnberg - Registergericht: Amtsgericht
> N?rnberg: HRB 32315
> ___________________________________________________________________________________________________
>
> Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen.
> Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht.
> Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt.
> The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by
> mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited.

--
Alexandre Belloni, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

2018-07-18 10:46:24

by Denis OSTERLAND-HEIM

[permalink] [raw]
Subject: Re: [PATCH v4 2/5] rtc: isl1208: add support for isl1219 with tamper detection

Hi,

Am Mittwoch, den 18.07.2018, 10:13 +0200 schrieb Alexandre Belloni:
> On 10/07/2018 09:44:15+0000, Denis OSTERLAND wrote:
> > 
> > + if (id->driver_data == TYPE_ISL1219) {
> > + rc = ISL1219_REG_EV_EVEN;
> > + rc = i2c_smbus_write_byte_data(client, ISL1219_REG_EV, rc);
> I'd pass ISL1219_REG_EV_EVEN directly instead of assigning it to rc.
>
Because of the 80 character limit per row, I thought this:
                rc = ISL1219_REG_EV_EVEN;
                rc = i2c_smbus_write_byte_data(client, ISL1219_REG_EV, rc);
would look nicer than that:
                rc = i2c_smbus_write_byte_data(client, ISL1219_REG_EV,
                                                        ISL1219_REG_EV_EVEN);
Are there any reasons why I should prefer the second one?

Regards Denis

Diehl Connectivity Solutions GmbH
Geschäftsführung: Horst Leonberger
Sitz der Gesellschaft: Nürnberg - Registergericht: Amtsgericht
Nürnberg: HRB 32315
___________________________________________________________________________________________________

Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen.
Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht.
Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt.
The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by
mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited.