]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | // SPDX-License-Identifier: GPL-2.0+ |
4395e06e TC |
2 | /* |
3 | * Copyright (C) 2010 Thomas Chou <[email protected]> | |
4395e06e TC |
4 | */ |
5 | ||
b953ec2b PD |
6 | #define LOG_CATEGORY UCLASS_MISC |
7 | ||
4395e06e TC |
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 | ||
e44d2f5d | 28 | int misc_write(struct udevice *dev, int offset, const void *buf, int size) |
4395e06e TC |
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 | ||
440bc11f MS |
59 | int misc_set_enabled(struct udevice *dev, bool val) |
60 | { | |
61 | const struct misc_ops *ops = device_get_ops(dev); | |
62 | ||
63 | if (!ops->set_enabled) | |
64 | return -ENOSYS; | |
65 | ||
66 | return ops->set_enabled(dev, val); | |
67 | } | |
68 | ||
4395e06e TC |
69 | UCLASS_DRIVER(misc) = { |
70 | .id = UCLASS_MISC, | |
71 | .name = "misc", | |
414cc151 | 72 | #if CONFIG_IS_ENABLED(OF_REAL) |
e5d61167 SG |
73 | .post_bind = dm_scan_fdt_dev, |
74 | #endif | |
4395e06e | 75 | }; |