Skip to contentSkip to conversation

dt-bindings: define vendor prefix for whwave, Inc.

PATCH In review zoro 4 participants 8 messages Nov 10, 2018

Subsystems (3)
lore
Share & tools
lore

zoro

author maintainer
#0 lore raw

PATCH 1/3 dt-bindings: define vendor prefix for whwave, Inc.

Introduce vendor prefix for whwave, Inc.
for SD3078 rtc device.

---
 .../devicetree/bindings/vendor-prefixes.txt        |    1 +
 1 file changed, 1 insertion(+)
Documentation/devicetree/bindings/vendor-prefixes.txt +1 -0
index 4b1a2a8..3d59d6a 100644
@@ -440,3 +440,4 @@ zidoo	Shenzhen Zidoo Technology Co., Ltd.
 zii	Zodiac Inflight Innovations
 zte	ZTE Corp.
 zyxel	ZyXEL Communications Corp.
+whwave	Shenzhen whwave Electronics crop
Signature · 1 line
1.7.9.5
author maintainer
#1 lore raw

PATCH 2/3 rtc: sd3078: new driver.

The sd3078 is a combination RTC and SRAM device with I2C interface.

---
 MAINTAINERS              |    6 +
 drivers/rtc/Kconfig      |    9 ++
 drivers/rtc/Makefile     |    1 +
 drivers/rtc/rtc-sd3078.c |  300 ++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 316 insertions(+)
 create mode 100644 drivers/rtc/rtc-sd3078.c
MAINTAINERS +6 -0
index 2f3eba4..002fcd7 100644
@@ -16125,6 +16125,12 @@ L:	[email protected]
 S:	Maintained
 F:	drivers/gpio/gpio-wcove.c
 
+WHWAVE RTC DRIVER
+M:	Zoro Li <[email protected]>
+L:	[email protected]
+S:	Maintained
+F:	drivers/rtc/rtc-sd3078.c
+
 WIIMOTE HID DRIVER
 M:	David Herrmann <[email protected]>
 L:	[email protected]
drivers/rtc/Kconfig +9 -0
index a819ef0..5b4b1b4 100644
@@ -646,6 +646,15 @@ config RTC_DRV_S5M
 	  This driver can also be built as a module. If so, the module
 	  will be called rtc-s5m.
 
+config RTC_DRV_SD3078
+    tristate "ZXW Crystal SD3078"
+    help
+      If you say yes here you get support for the ZXW Crystal
+      SD3078 RTC chips.
+
+      This driver can also be built as a module. If so, the module
+      will be called rtc-sd3078.
+
 endif # I2C
 
 comment "SPI RTC drivers"
drivers/rtc/Makefile +1 -0
index 290c173..de9b670 100644
@@ -176,3 +176,4 @@ obj-$(CONFIG_RTC_DRV_WM8350)	+= rtc-wm8350.o
 obj-$(CONFIG_RTC_DRV_X1205)	+= rtc-x1205.o
 obj-$(CONFIG_RTC_DRV_XGENE)	+= rtc-xgene.o
 obj-$(CONFIG_RTC_DRV_ZYNQMP)	+= rtc-zynqmp.o
+obj-$(CONFIG_RTC_DRV_SD3078)	+= rtc-sd3078.o
drivers/rtc/rtc-sd3078.c new file +300 -0

300 lines not on this page · raw message

Signature · 1 line
1.7.9.5
#2 lore raw

Re: [PATCH 2/3] rtc: sd3078: new driver.

Hello,

drivers/rtc/Makefile obj-$(CONFIG_RTC_DRV_WM8350) += rtc-wm8350.o · line 179

Quoted 9 lines · zoro
drivers/rtc/Makefile +1 -0
index 290c173..de9b670 100644
@@ -176,3 +176,4 @@ obj-$(CONFIG_RTC_DRV_WM8350)	+= rtc-wm8350.o
 obj-$(CONFIG_RTC_DRV_X1205)	+= rtc-x1205.o
 obj-$(CONFIG_RTC_DRV_XGENE)	+= rtc-xgene.o
 obj-$(CONFIG_RTC_DRV_ZYNQMP)	+= rtc-zynqmp.o
+obj-$(CONFIG_RTC_DRV_SD3078)	+= rtc-sd3078.o

This list is sorted alphabetically.

Quoted 28 lines
drivers/rtc/rtc-sd3078.c new file +22 -0
new file mode 100644
index 0000000..bb24ba1
@@ -0,0 +1,300 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Real Time Clock (RTC) Driver for sd3078
+ * Copyright (C) 2018 Zoro Li
+ */
+
+#include <linux/module.h>
+#include <linux/i2c.h>
+#include <linux/bcd.h>
+#include <linux/rtc.h>
+#include <linux/slab.h>
+
+#define SD3078_REG_SC			0x00
+#define SD3078_REG_MN			0x01
+#define SD3078_REG_HR			0x02
+#define SD3078_REG_DW			0x03
+#define SD3078_REG_DM			0x04
+#define SD3078_REG_MO			0x05
+#define SD3078_REG_YR			0x06
+
+#define SD3078_REG_CTRL1		0x0f
+#define SD3078_REG_CTRL2		0x10

drivers/rtc/rtc-sd3078.c line 32

Quoted 10 lines
drivers/rtc/rtc-sd3078.c new file +10 -0
+#define SD3078_REG_CTRL3		0x11
+
+#define KEY_WRITE1		0x80
+#define KEY_WRITE2		0x04
+#define KEY_WRITE3		0x80
+
+struct sd3078 {
+	struct rtc_device *rtc;
+};
+

This structure seems useless as it contains only one member and removing it allows to avoid the allocation in probe.

drivers/rtc/rtc-sd3078.c line 34

Quoted 2 lines
drivers/rtc/rtc-sd3078.c new file +2 -0
+struct i2c_driver sd3078_driver;
+

This is unnecessary, see below...

Quoted 44 lines
drivers/rtc/rtc-sd3078.c new file +44 -0
+
+static int sd3078_i2c_read_regs(struct i2c_client *client,
+	unsigned char reg, unsigned char buf[], unsigned int len)
+{
+	struct i2c_adapter *adap = client->adapter;
+	unsigned char reg_buf = reg;
+	int ret;
+	struct i2c_msg msgs[] = {
+		{/* setup read ptr */
+			.addr = client->addr,
+			.len = 1,
+			.buf = &reg_buf
+		},
+		{/* read status + date */
+			.addr = client->addr,
+			.flags = I2C_M_RD,
+			.len = len,
+			.buf = buf
+		},
+	};
+
+	ret = i2c_transfer(adap, msgs, 2);
+	return (ret == 2) ? len : ret;
+}
+
+static int sd3078_i2c_write_reg(struct i2c_client *client,
+	unsigned char reg, unsigned char value)
+{
+	unsigned char data[2];
+	int ret;
+
+	data[0] = reg;
+	data[1] = value;
+	ret = i2c_master_send(client, data, 2);
+	return ret;
+}
+
+/*
+ * In order to prevent arbitrary modification of the time register,
+ * when modification of the register,
+ * the "write" bit needs to be written in a certain order.
+ * 1. set WRITE1 bit
+ * 2. set WRITE2 bit
+ * 1. set WRITE3 bit

drivers/rtc/rtc-sd3078.c line 88

Quoted 10 lines
drivers/rtc/rtc-sd3078.c new file +10 -0
+ */
+static void sd3078_enable_reg_write(struct i2c_client *client)
+{
+	unsigned char reg1, reg2;
+
+	sd3078_i2c_read_regs(client, SD3078_REG_CTRL1, &reg1, 1);
+	sd3078_i2c_read_regs(client, SD3078_REG_CTRL2, &reg2, 1);
+
+	reg2 |= KEY_WRITE1;
+	sd3078_i2c_write_reg(client, SD3078_REG_CTRL2, reg2);

You should probably use regmap instead of defining your own accessors. This way, you have access to regmap_update_bits which would be shorter.

Quoted 48 lines
drivers/rtc/rtc-sd3078.c new file +48 -0
+
+	reg1 |= KEY_WRITE2;
+	sd3078_i2c_write_reg(client, SD3078_REG_CTRL1, reg1);
+
+	reg1 |= KEY_WRITE3;
+	sd3078_i2c_write_reg(client, SD3078_REG_CTRL1, reg1);
+
+	sd3078_i2c_read_regs(client, SD3078_REG_CTRL1, &reg1, 1);
+	sd3078_i2c_read_regs(client, SD3078_REG_CTRL2, &reg2, 1);
+}
+
+/*
+ * In order to prevent arbitrary modification of the time register,
+ * we should disable the write function.
+ * when disable write,
+ * the "write" bit needs to be clear in a certain order.
+ * 1. clear WRITE2 bit
+ * 2. clear WRITE3 bit
+ * 3. clear WRITE1 bit
+ */
+static void sd3078_disable_reg_write(struct i2c_client *client)
+{
+	unsigned char reg1, reg2;
+
+	sd3078_i2c_read_regs(client, SD3078_REG_CTRL1, &reg1, 1);
+	sd3078_i2c_read_regs(client, SD3078_REG_CTRL2, &reg2, 1);
+
+	reg1 &= ~KEY_WRITE2;
+	sd3078_i2c_write_reg(client, SD3078_REG_CTRL1, reg1);
+
+	reg1 &= ~KEY_WRITE3;
+	sd3078_i2c_write_reg(client, SD3078_REG_CTRL1, reg1);
+
+	reg2 &= ~KEY_WRITE1;
+	sd3078_i2c_write_reg(client, SD3078_REG_CTRL2, reg2);
+
+	sd3078_i2c_read_regs(client, SD3078_REG_CTRL1, &reg1, 1);
+	sd3078_i2c_read_regs(client, SD3078_REG_CTRL2, &reg2, 1);
+}
+
+static int sd3078_get_datetime(struct i2c_client *client, struct rtc_time *tm)
+{
+	unsigned char buf[7] = {0};
+	unsigned char hour;
+
+	sd3078_i2c_read_regs(client, SD3078_REG_SC, buf, 7);
+
+	tm->tm_sec	= bcd2bin(buf[SD3078_REG_SC] & 0x7F);

drivers/rtc/rtc-sd3078.c line 146

Quoted 10 lines
drivers/rtc/rtc-sd3078.c new file +10 -0
+	tm->tm_min	= bcd2bin(buf[SD3078_REG_MN] & 0x7F);
+	hour = buf[SD3078_REG_HR];
+
+	if (hour & 0x80) /* 24H PM */
+		tm->tm_hour = bcd2bin(buf[SD3078_REG_HR] & 0x3F);
+	else if (hour & 0x20) /* 12H PM */
+		tm->tm_hour = bcd2bin(buf[SD3078_REG_HR] & 0x1F) + 12;
+	else /* 12H AM */
+		tm->tm_hour = bcd2bin(buf[SD3078_REG_HR] & 0x1F);
+

Is it really useful to support 12H mode?

drivers/rtc/rtc-sd3078.c line 151

Quoted 5 lines
drivers/rtc/rtc-sd3078.c new file +5 -0
+	tm->tm_mday = bcd2bin(buf[SD3078_REG_DM] & 0x3F);
+	tm->tm_wday = buf[SD3078_REG_DW] & 0x07;
+	/* rtc mn 1-12 */
+	tm->tm_mon	= bcd2bin(buf[SD3078_REG_MO] & 0x1F) - 1;
+	tm->tm_year = bcd2bin(buf[SD3078_REG_YR])+100;

spaces preferred around that '+'

drivers/rtc/rtc-sd3078.c line 153

Quoted 2 lines
drivers/rtc/rtc-sd3078.c new file +2 -0
+
+	if (rtc_valid_tm(tm) < 0)

This rtc_valid_tm call is useless because this is the first thing the core is doing after calling the read_time callback.

Quoted 6 lines
drivers/rtc/rtc-sd3078.c new file +6 -0
+		dev_err(&client->dev, "retrieved date/time is not valid.\n");
+
+	return 0;
+}
+
+static int sd3078_set_datetime(struct i2c_client *client, struct rtc_time *tm)

drivers/rtc/rtc-sd3078.c line 169

Quoted 10 lines
drivers/rtc/rtc-sd3078.c new file +10 -0
+{
+	int i, err;
+	unsigned char buf[9];
+
+	dev_dbg(&client->dev,
+		"%s: secs=%d, mins=%d, hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
+		__func__,
+		tm->tm_sec, tm->tm_min, tm->tm_hour,
+		tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
+

I don't find that debug to be useful as you already know what the core is passing to the set_time function.

drivers/rtc/rtc-sd3078.c line 182

Quoted 13 lines
drivers/rtc/rtc-sd3078.c new file +13 -0
+    /* hours, minutes and seconds */
+	buf[SD3078_REG_SC] = bin2bcd(tm->tm_sec);
+	buf[SD3078_REG_MN] = bin2bcd(tm->tm_min);
+	/* set 24H mode */
+	buf[SD3078_REG_HR] = bin2bcd(tm->tm_hour) | 0x80;
+
+	buf[SD3078_REG_DM] = bin2bcd(tm->tm_mday);
+
+    /* month, 1 - 12 */
+	buf[SD3078_REG_MO] = bin2bcd(tm->tm_mon) + 1;
+
+    /* year and century */
+	buf[SD3078_REG_YR] = bin2bcd(tm->tm_year % 100);

please, don't use % 100, instead set the range of the RTC properly in probe.

drivers/rtc/rtc-sd3078.c line 190

Quoted 8 lines
drivers/rtc/rtc-sd3078.c new file +8 -0
+	buf[SD3078_REG_DW] = tm->tm_wday & 0x07;
+
+	sd3078_enable_reg_write(client);
+
+    /* write register's data */
+	for (i = 0; i < 7; i++) {
+		err = sd3078_i2c_write_reg(client,
+			SD3078_REG_SC + i, buf[SD3078_REG_SC + i]);

Again, regmap would allow you to avoid this loop

drivers/rtc/rtc-sd3078.c line 195

Quoted 5 lines
drivers/rtc/rtc-sd3078.c new file +5 -0
+		if (err != 2)
+			return -EIO;
+	}
+
+	sd3078_disable_reg_write(client);

I don't find it too useful to enable write protection. It is actually harmful when trying to precisely set the RTC as this adds more latency. But it is up to you to keep it.

Quoted 8 lines
drivers/rtc/rtc-sd3078.c new file +8 -0
+
+	return 0;
+}
+
+
+#ifdef CONFIG_RTC_INTF_DEV
+static int sd3078_rtc_ioctl(struct device *dev,
+		unsigned int cmd, unsigned long arg)

drivers/rtc/rtc-sd3078.c line 213

Quoted 10 lines
drivers/rtc/rtc-sd3078.c new file +10 -0
+{
+	switch (cmd) {
+	default:
+		return -ENOIOCTLCMD;
+	}
+}
+#else
+#define sd3078_rtc_ioctl NULL
+#endif
+

This block is totally useless.

drivers/rtc/rtc-sd3078.c line 216

Quoted 3 lines
drivers/rtc/rtc-sd3078.c new file +3 -0
+static int sd3078_rtc_read_time(struct device *dev, struct rtc_time *tm)
+{
+	return sd3078_get_datetime(to_i2c_client(dev), tm);

Please remove the useless indirection.

drivers/rtc/rtc-sd3078.c line 221

Quoted 5 lines
drivers/rtc/rtc-sd3078.c new file +5 -0
+}
+
+static int sd3078_rtc_set_time(struct device *dev, struct rtc_time *tm)
+{
+	return sd3078_set_datetime(to_i2c_client(dev), tm);

Ditto.

Quoted 16 lines
drivers/rtc/rtc-sd3078.c new file +16 -0
+}
+
+static const struct rtc_class_ops sd3078_rtc_ops = {
+	.ioctl		= sd3078_rtc_ioctl,
+	.read_time	= sd3078_rtc_read_time,
+	.set_time	= sd3078_rtc_set_time,
+};
+
+static int sd3078_probe(struct i2c_client *client,
+		const struct i2c_device_id *id)
+{
+	struct sd3078 *sd3078;
+
+	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
+		return -ENODEV;
+

drivers/rtc/rtc-sd3078.c line 247

Quoted 10 lines
drivers/rtc/rtc-sd3078.c new file +10 -0
+	sd3078 = devm_kzalloc(&client->dev, sizeof(*sd3078), GFP_KERNEL);
+	if (!sd3078)
+		return -ENOMEM;
+
+	i2c_set_clientdata(client, sd3078);
+
+	sd3078->rtc = devm_rtc_device_register(&client->dev,
+			sd3078_driver.driver.name,
+			&sd3078_rtc_ops, THIS_MODULE);
+

Please use devm_rtc_allocate_device and rtc_register_device. The name is not needed anymore.

This also allow you to set the range. Probably something like:

rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
rtc->range_max = RTC_TIMESTAMP_END_2099;

Maybe you can go up to 2199 if your RTC has a century bit and properly handle the leap day in 2100.

drivers/rtc/rtc-sd3078.c line 258

Quoted 11 lines
drivers/rtc/rtc-sd3078.c new file +11 -0
+	if (IS_ERR(sd3078->rtc))
+		return PTR_ERR(sd3078->rtc);
+
+	return 0;
+}
+
+static int sd3078_remove(struct i2c_client *client)
+{
+	return 0;
+}
+

This function is useless.

drivers/rtc/rtc-sd3078.c line 269

Quoted 11 lines
drivers/rtc/rtc-sd3078.c new file +11 -0
+static const struct i2c_device_id sd3078_id[] = {
+	{"sd3078", 0},
+	{ }
+};
+MODULE_DEVICE_TABLE(i2c, sd3078_id);
+
+#ifdef CONFIG_OF
+static const struct of_device_id rtc_dt_ids[] = {
+	{ .compatible = "whwave,sd3078" },
+	{},
+};

This is missing MODULE_DEVICE_TABLE(of, rtc_dt_ids);

drivers/rtc/rtc-sd3078.c line 276

Quoted 7 lines
drivers/rtc/rtc-sd3078.c new file +7 -0
+#endif
+
+struct i2c_driver sd3078_driver = {
+	.driver     = {
+		.name   = "sd3078",
+		.owner  = THIS_MODULE,
+#ifdef CONFIG_OF

This ifdef is unecessary

Quoted 10 lines
drivers/rtc/rtc-sd3078.c new file +10 -0
+		.of_match_table = of_match_ptr(rtc_dt_ids),
+#endif
+	},
+	.probe      = sd3078_probe,
+	.remove     = sd3078_remove,
+	.id_table   = sd3078_id,
+};
+
+static int __init sd3078_init(void)
+{

drivers/rtc/rtc-sd3078.c line 296

Quoted 10 lines
drivers/rtc/rtc-sd3078.c new file +10 -0
+	return i2c_add_driver(&sd3078_driver);
+}
+
+static void __exit sd3078_exit(void)
+{
+	i2c_del_driver(&sd3078_driver);
+}
+
+module_init(sd3078_init);
+module_exit(sd3078_exit);

Please use module_i2c_driver instead of open coding.

drivers/rtc/rtc-sd3078.c line 300

Quoted 4 lines
drivers/rtc/rtc-sd3078.c new file +4 -0
+
+MODULE_AUTHOR("Zoro Li <[email protected]>");
+MODULE_DESCRIPTION("SD3078 RTC driver");
+MODULE_LICENSE("GPL");

Your SPDX identifier says GPL v2 while this is GPL v2+.

Quoted 3 lines
Signature · 1 line
1.7.9.5
Signature · 3 lines
Alexandre Belloni, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
#3 lore raw

Re: [PATCH 2/3] rtc: sd3078: new driver.

In reply to zoro
Thank you for the patch! Perhaps something to improve:

Hi zoro,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on abelloni/rtc-next]
[also build test WARNING on v4.20-rc1 next-20181109]
[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/zoro/dt-bindings-define-vendor-prefix-for-whwave-Inc/20181110-205048
base:   https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git rtc-next

coccinelle warnings: (new ones prefixed by >>)

>> drivers/rtc/rtc-sd3078.c:248:1-3: WARNING: PTR_ERR_OR_ZERO can be used

Please review and possibly fold the followup patch.

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

#4 lore raw

[PATCH] rtc: sd3078: fix ptr_ret.cocci warnings

In reply to zoro
drivers/rtc/rtc-sd3078.c:248:1-3: WARNING: PTR_ERR_OR_ZERO can be used

From: kbuild test robot <[email protected]>

drivers/rtc/rtc-sd3078.c:248:1-3: WARNING: PTR_ERR_OR_ZERO can be used

Use PTR_ERR_OR_ZERO rather than if(IS_ERR(...)) + PTR_ERR

Generated by: scripts/coccinelle/api/ptr_ret.cocci

Fixes e231edadd7fa ("rtc: sd3078: new driver.")

---

url:    https://github.com/0day-ci/linux/commits/zoro/dt-bindings-define-vendor-prefix-for-whwave-Inc/20181110-205048
base:   https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git rtc-next
 rtc-sd3078.c |    5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
drivers/rtc/rtc-sd3078.c +1 -4
@@ -245,10 +245,7 @@ static int sd3078_probe(struct i2c_clien
 			sd3078_driver.driver.name,
 			&sd3078_rtc_ops, THIS_MODULE);
 
-	if (IS_ERR(sd3078->rtc))
-		return PTR_ERR(sd3078->rtc);
-
-	return 0;
+	return PTR_ERR_OR_ZERO(sd3078->rtc);
 }
 
 static int sd3078_remove(struct i2c_client *client)
author maintainer
#5 lore raw

PATCH 3/3 dt-bindings: rtc: sd3078: add device tree documentation

In reply to zoro

The devicetree documentation for the SD3078 device tree binding is added with a short example.

---
 .../devicetree/bindings/rtc/rtc-sd3078.txt         |   15 +++++++++++++++
 MAINTAINERS                                        |    1 +
 2 files changed, 16 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/rtc/rtc-sd3078.txt
Documentation/devicetree/bindings/rtc/rtc-sd3078.txt new file +15 -0
new file mode 100644
index 0000000..9b45c8e
@@ -0,0 +1,15 @@
+SD3078 Real Time Clock
+============================
+
+Required properties:
+- compatible: Should contain "whwave,sd3078".
+- reg: I2C address for chip.
+
+Example:
+
+sd3078: sd3078@32 {
+       compatible = "whwave,sd3078";
+       reg = <0x32>;
+};
+
+
MAINTAINERS +1 -0
index 002fcd7..50c038d 100644
@@ -16130,6 +16130,7 @@ M:	Zoro Li <[email protected]>
 L:	[email protected]
 S:	Maintained
 F:	drivers/rtc/rtc-sd3078.c
+F:	Documentation/devicetree/bindings/rtc/rtc-sd3078.txt
 
 WIIMOTE HID DRIVER
 M:	David Herrmann <[email protected]>
Signature · 1 line
1.7.9.5
#6 lore raw
In reply to zoro

Hello,

Quoted 13 lines · zoro

Introduce vendor prefix for whwave, Inc.
for SD3078 rtc device.

---
 .../devicetree/bindings/vendor-prefixes.txt        |    1 +
 1 file changed, 1 insertion(+)
Documentation/devicetree/bindings/vendor-prefixes.txt +0 -0
index 4b1a2a8..3d59d6a 100644

Documentation/devicetree/bindings/vendor-prefixes.txt zidoo Shenzhen Zidoo Technology Co., Ltd. · line 443

Quoted 4 lines
Documentation/devicetree/bindings/vendor-prefixes.txt +1 -0
@@ -440,3 +440,4 @@ zidoo	Shenzhen Zidoo Technology Co., Ltd.
 zii	Zodiac Inflight Innovations
 zte	ZTE Corp.
 zyxel	ZyXEL Communications Corp.
+whwave	Shenzhen whwave Electronics crop

This file must be sorted alphabetically.

Signature · 3 lines
Alexandre Belloni, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
author maintainer
#7 lore raw

Hello:
Thanks for your reply.
I'll just modify it and send it again.
Thank you very much.

| |
龙
|
|
邮箱:[email protected]
|

签名由 网易邮箱大师 定制

在2018年11月10日 20:19,Alexandre Belloni 写道:
Hello,

Quoted 13 lines · zoro

Introduce vendor prefix for whwave, Inc.
for SD3078 rtc device.

---
 .../devicetree/bindings/vendor-prefixes.txt        |    1 +
 1 file changed, 1 insertion(+)
Documentation/devicetree/bindings/vendor-prefixes.txt +0 -0
index 4b1a2a8..3d59d6a 100644

Documentation/devicetree/bindings/vendor-prefixes.txt zidoo Shenzhen Zidoo Technology Co., Ltd. · line 443

Quoted 4 lines
Documentation/devicetree/bindings/vendor-prefixes.txt +1 -0
@@ -440,3 +440,4 @@ zidoo     Shenzhen Zidoo Technology Co., Ltd.
 zii     Zodiac Inflight Innovations
 zte     ZTE Corp.
 zyxel     ZyXEL Communications Corp.
+whwave     Shenzhen whwave Electronics crop

This file must be sorted alphabetically.

--
Alexandre Belloni, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com