Home | History | Annotate | Download | only in misc
      1 // SPDX-License-Identifier: GPL-2.0+
      2 /*
      3  * Copyright (C) 2010 Thomas Chou <thomas (at) wytron.com.tw>
      4  */
      5 
      6 #include <common.h>
      7 #include <dm.h>
      8 #include <errno.h>
      9 #include <misc.h>
     10 
     11 /*
     12  * Implement a  miscellaneous uclass for those do not fit other more
     13  * general classes. A set of generic read, write and ioctl methods may
     14  * be used to access the device.
     15  */
     16 
     17 int misc_read(struct udevice *dev, int offset, void *buf, int size)
     18 {
     19 	const struct misc_ops *ops = device_get_ops(dev);
     20 
     21 	if (!ops->read)
     22 		return -ENOSYS;
     23 
     24 	return ops->read(dev, offset, buf, size);
     25 }
     26 
     27 int misc_write(struct udevice *dev, int offset, void *buf, int size)
     28 {
     29 	const struct misc_ops *ops = device_get_ops(dev);
     30 
     31 	if (!ops->write)
     32 		return -ENOSYS;
     33 
     34 	return ops->write(dev, offset, buf, size);
     35 }
     36 
     37 int misc_ioctl(struct udevice *dev, unsigned long request, void *buf)
     38 {
     39 	const struct misc_ops *ops = device_get_ops(dev);
     40 
     41 	if (!ops->ioctl)
     42 		return -ENOSYS;
     43 
     44 	return ops->ioctl(dev, request, buf);
     45 }
     46 
     47 int misc_call(struct udevice *dev, int msgid, void *tx_msg, int tx_size,
     48 	      void *rx_msg, int rx_size)
     49 {
     50 	const struct misc_ops *ops = device_get_ops(dev);
     51 
     52 	if (!ops->call)
     53 		return -ENOSYS;
     54 
     55 	return ops->call(dev, msgid, tx_msg, tx_size, rx_msg, rx_size);
     56 }
     57 
     58 UCLASS_DRIVER(misc) = {
     59 	.id		= UCLASS_MISC,
     60 	.name		= "misc",
     61 };
     62