1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * omap_device headers |
4 | * |
5 | * Copyright (C) 2009 Nokia Corporation |
6 | * Paul Walmsley |
7 | * |
8 | * Developed in collaboration with (alphabetical order): Benoit |
9 | * Cousson, Kevin Hilman, Tony Lindgren, Rajendra Nayak, Vikram |
10 | * Pandita, Sakari Poussa, Anand Sawant, Santosh Shilimkar, Richard |
11 | * Woodruff |
12 | * |
13 | * This type of functionality should be implemented as a proper |
14 | * omap_bus/omap_device in Linux. |
15 | * |
16 | * omap_device differs from omap_hwmod in that it includes external |
17 | * (e.g., board- and system-level) integration details. omap_hwmod |
18 | * stores hardware data that is invariant for a given OMAP chip. |
19 | */ |
20 | #ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_DEVICE_H |
21 | #define __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_DEVICE_H |
22 | |
23 | #include <linux/kernel.h> |
24 | #include <linux/platform_device.h> |
25 | |
26 | #include "omap_hwmod.h" |
27 | |
28 | /* omap_device._state values */ |
29 | #define OMAP_DEVICE_STATE_UNKNOWN 0 |
30 | #define OMAP_DEVICE_STATE_ENABLED 1 |
31 | #define OMAP_DEVICE_STATE_IDLE 2 |
32 | #define OMAP_DEVICE_STATE_SHUTDOWN 3 |
33 | |
34 | /* omap_device.flags values */ |
35 | #define OMAP_DEVICE_SUSPENDED BIT(0) |
36 | |
37 | /** |
38 | * struct omap_device - omap_device wrapper for platform_devices |
39 | * @pdev: platform_device |
40 | * @hwmods: (one .. many per omap_device) |
41 | * @hwmods_cnt: ARRAY_SIZE() of @hwmods |
42 | * @_state: one of OMAP_DEVICE_STATE_* (see above) |
43 | * @flags: device flags |
44 | * @_driver_status: one of BUS_NOTIFY_*_DRIVER from <linux/device.h> |
45 | * |
46 | * Integrates omap_hwmod data into Linux platform_device. |
47 | * |
48 | * Field names beginning with underscores are for the internal use of |
49 | * the omap_device code. |
50 | * |
51 | */ |
52 | struct omap_device { |
53 | struct platform_device *pdev; |
54 | struct omap_hwmod **hwmods; |
55 | unsigned long _driver_status; |
56 | u8 hwmods_cnt; |
57 | u8 _state; |
58 | u8 flags; |
59 | }; |
60 | |
61 | /* Device driver interface (call via platform_data fn ptrs) */ |
62 | |
63 | int omap_device_enable(struct platform_device *pdev); |
64 | int omap_device_idle(struct platform_device *pdev); |
65 | |
66 | /* Other */ |
67 | |
68 | int omap_device_assert_hardreset(struct platform_device *pdev, |
69 | const char *name); |
70 | int omap_device_deassert_hardreset(struct platform_device *pdev, |
71 | const char *name); |
72 | |
73 | /* Get omap_device pointer from platform_device pointer */ |
74 | static inline struct omap_device *to_omap_device(struct platform_device *pdev) |
75 | { |
76 | return pdev ? pdev->archdata.od : NULL; |
77 | } |
78 | #endif |
79 | |