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