[U-Boot] [PATCH v6 1/2] dm: implement a Miscellaneous uclass

2015-10-10 Thread Thomas Chou
Implement a Miscellaneous uclass with generic read or
write operations. This class is used only for those
do not fit other more general classes.

Signed-off-by: Thomas Chou 
Acked-by: Simon Glass 
---
v2
  add missing misc.h.
v3
  no change.
v4
  add ioctl and comments as Simon suggested.
v5
  no change.
v6
  replace DM_MISC to MISC.

 drivers/misc/Kconfig   |  9 ++
 drivers/misc/Makefile  |  1 +
 drivers/misc/misc-uclass.c | 51 ++
 include/dm/uclass-id.h |  1 +
 include/misc.h | 79 ++
 5 files changed, 141 insertions(+)
 create mode 100644 drivers/misc/misc-uclass.c
 create mode 100644 include/misc.h

diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index 8b38a84..2699329 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -4,6 +4,15 @@
 
 menu "Multifunction device drivers"
 
+config MISC
+   bool "Enable Driver Model for Misc drivers"
+   depends on DM
+   help
+ Enable driver model for miscellaneous devices. This class is
+ used only for those do not fit other more general classes. A
+ set of generic read, write and ioctl methods may be used to
+ access the device.
+
 config CMD_CROS_EC
bool "Enable crosec command"
depends on CROS_EC
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index 8d0fc3c..b285946 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -5,6 +5,7 @@
 # SPDX-License-Identifier: GPL-2.0+
 #
 
+obj-$(CONFIG_MISC) += misc-uclass.o
 obj-$(CONFIG_ALI152X) += ali512x.o
 obj-$(CONFIG_DS4510)  += ds4510.o
 obj-$(CONFIG_CBMEM_CONSOLE) += cbmem_console.o
diff --git a/drivers/misc/misc-uclass.c b/drivers/misc/misc-uclass.c
new file mode 100644
index 000..a436ff5
--- /dev/null
+++ b/drivers/misc/misc-uclass.c
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2010 Thomas Chou 
+ *
+ * SPDX-License-Identifier:GPL-2.0+
+ */
+
+#include 
+#include 
+#include 
+#include 
+
+/*
+ * Implement a  miscellaneous uclass for those do not fit other more
+ * general classes. A set of generic read, write and ioctl methods may
+ * be used to access the device.
+ */
+
+int misc_read(struct udevice *dev, int offset, void *buf, int size)
+{
+   const struct misc_ops *ops = device_get_ops(dev);
+
+   if (!ops->read)
+   return -ENOSYS;
+
+   return ops->read(dev, offset, buf, size);
+}
+
+int misc_write(struct udevice *dev, int offset, void *buf, int size)
+{
+   const struct misc_ops *ops = device_get_ops(dev);
+
+   if (!ops->write)
+   return -ENOSYS;
+
+   return ops->write(dev, offset, buf, size);
+}
+
+int misc_ioctl(struct udevice *dev, unsigned long request, void *buf)
+{
+   const struct misc_ops *ops = device_get_ops(dev);
+
+   if (!ops->ioctl)
+   return -ENOSYS;
+
+   return ops->ioctl(dev, request, buf);
+}
+
+UCLASS_DRIVER(misc) = {
+   .id = UCLASS_MISC,
+   .name   = "misc",
+};
diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
index aff34a4..a6982ab 100644
--- a/include/dm/uclass-id.h
+++ b/include/dm/uclass-id.h
@@ -39,6 +39,7 @@ enum uclass_id {
UCLASS_LED, /* Light-emitting diode (LED) */
UCLASS_LPC, /* x86 'low pin count' interface */
UCLASS_MASS_STORAGE,/* Mass storage device */
+   UCLASS_MISC,/* Miscellaneous device */
UCLASS_MMC, /* SD / MMC card or chip */
UCLASS_MOD_EXP, /* RSA Mod Exp device */
UCLASS_PCH, /* x86 platform controller hub */
diff --git a/include/misc.h b/include/misc.h
new file mode 100644
index 000..73de11b
--- /dev/null
+++ b/include/misc.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2015 Thomas Chou 
+ *
+ * SPDX-License-Identifier:GPL-2.0+
+ */
+
+#ifndef _MISC_H_
+#define _MISC_H_
+
+/*
+ * Read the device to buffer, optional.
+ *
+ * @dev: the device
+ * @offset: offset to read the device
+ * @buf: pointer to data buffer
+ * @size: data size in bytes to read the device
+ * @return: 0 if OK, -ve on error
+ */
+int misc_read(struct udevice *dev, int offset, void *buf, int size);
+/*
+ * Write buffer to the device, optional.
+ *
+ * @dev: the device
+ * @offset: offset to write the device
+ * @buf: pointer to data buffer
+ * @size: data size in bytes to write the device
+ * @return: 0 if OK, -ve on error
+ */
+int misc_write(struct udevice *dev, int offset, void *buf, int size);
+/*
+ * Assert command to the device, optional.
+ *
+ * @dev: the device
+ * @request: command to be sent to the device
+ * @buf: pointer to buffer related to the requset
+ * @return: 0 if OK, -ve on error
+ */
+int misc_ioctl(struct udevice *dev, unsigned long request, void *buf);
+
+/*
+ * struct misc_ops - Driver model Misc operations
+ *
+ * The uclass interface is implemented by all miscellaneous devices which
+ * use driver model.
+ */
+struct misc_ops {

Re: [U-Boot] [PATCH v6 1/2] dm: implement a Miscellaneous uclass

2015-10-13 Thread Thomas Chou



On 10/10/2015 05:07 PM, Thomas Chou wrote:

Implement a Miscellaneous uclass with generic read or
write operations. This class is used only for those
do not fit other more general classes.

Signed-off-by: Thomas Chou 
Acked-by: Simon Glass 
---
v2
   add missing misc.h.
v3
   no change.
v4
   add ioctl and comments as Simon suggested.
v5
   no change.
v6
   replace DM_MISC to MISC.

  drivers/misc/Kconfig   |  9 ++
  drivers/misc/Makefile  |  1 +
  drivers/misc/misc-uclass.c | 51 ++
  include/dm/uclass-id.h |  1 +
  include/misc.h | 79 ++
  5 files changed, 141 insertions(+)
  create mode 100644 drivers/misc/misc-uclass.c
  create mode 100644 include/misc.h



Applied to u-boot-nios.

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot