162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * omap_device headers 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2009 Nokia Corporation 662306a36Sopenharmony_ci * Paul Walmsley 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Developed in collaboration with (alphabetical order): Benoit 962306a36Sopenharmony_ci * Cousson, Kevin Hilman, Tony Lindgren, Rajendra Nayak, Vikram 1062306a36Sopenharmony_ci * Pandita, Sakari Poussa, Anand Sawant, Santosh Shilimkar, Richard 1162306a36Sopenharmony_ci * Woodruff 1262306a36Sopenharmony_ci * 1362306a36Sopenharmony_ci * This type of functionality should be implemented as a proper 1462306a36Sopenharmony_ci * omap_bus/omap_device in Linux. 1562306a36Sopenharmony_ci * 1662306a36Sopenharmony_ci * omap_device differs from omap_hwmod in that it includes external 1762306a36Sopenharmony_ci * (e.g., board- and system-level) integration details. omap_hwmod 1862306a36Sopenharmony_ci * stores hardware data that is invariant for a given OMAP chip. 1962306a36Sopenharmony_ci */ 2062306a36Sopenharmony_ci#ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_DEVICE_H 2162306a36Sopenharmony_ci#define __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_DEVICE_H 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#include <linux/kernel.h> 2462306a36Sopenharmony_ci#include <linux/platform_device.h> 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci#include "omap_hwmod.h" 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci/* omap_device._state values */ 2962306a36Sopenharmony_ci#define OMAP_DEVICE_STATE_UNKNOWN 0 3062306a36Sopenharmony_ci#define OMAP_DEVICE_STATE_ENABLED 1 3162306a36Sopenharmony_ci#define OMAP_DEVICE_STATE_IDLE 2 3262306a36Sopenharmony_ci#define OMAP_DEVICE_STATE_SHUTDOWN 3 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci/* omap_device.flags values */ 3562306a36Sopenharmony_ci#define OMAP_DEVICE_SUSPENDED BIT(0) 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci/** 3862306a36Sopenharmony_ci * struct omap_device - omap_device wrapper for platform_devices 3962306a36Sopenharmony_ci * @pdev: platform_device 4062306a36Sopenharmony_ci * @hwmods: (one .. many per omap_device) 4162306a36Sopenharmony_ci * @hwmods_cnt: ARRAY_SIZE() of @hwmods 4262306a36Sopenharmony_ci * @_state: one of OMAP_DEVICE_STATE_* (see above) 4362306a36Sopenharmony_ci * @flags: device flags 4462306a36Sopenharmony_ci * @_driver_status: one of BUS_NOTIFY_*_DRIVER from <linux/device.h> 4562306a36Sopenharmony_ci * 4662306a36Sopenharmony_ci * Integrates omap_hwmod data into Linux platform_device. 4762306a36Sopenharmony_ci * 4862306a36Sopenharmony_ci * Field names beginning with underscores are for the internal use of 4962306a36Sopenharmony_ci * the omap_device code. 5062306a36Sopenharmony_ci * 5162306a36Sopenharmony_ci */ 5262306a36Sopenharmony_cistruct omap_device { 5362306a36Sopenharmony_ci struct platform_device *pdev; 5462306a36Sopenharmony_ci struct omap_hwmod **hwmods; 5562306a36Sopenharmony_ci unsigned long _driver_status; 5662306a36Sopenharmony_ci u8 hwmods_cnt; 5762306a36Sopenharmony_ci u8 _state; 5862306a36Sopenharmony_ci u8 flags; 5962306a36Sopenharmony_ci}; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci/* Device driver interface (call via platform_data fn ptrs) */ 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ciint omap_device_enable(struct platform_device *pdev); 6462306a36Sopenharmony_ciint omap_device_idle(struct platform_device *pdev); 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci/* Other */ 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ciint omap_device_assert_hardreset(struct platform_device *pdev, 6962306a36Sopenharmony_ci const char *name); 7062306a36Sopenharmony_ciint omap_device_deassert_hardreset(struct platform_device *pdev, 7162306a36Sopenharmony_ci const char *name); 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci/* Get omap_device pointer from platform_device pointer */ 7462306a36Sopenharmony_cistatic inline struct omap_device *to_omap_device(struct platform_device *pdev) 7562306a36Sopenharmony_ci{ 7662306a36Sopenharmony_ci return pdev ? pdev->archdata.od : NULL; 7762306a36Sopenharmony_ci} 7862306a36Sopenharmony_ci#endif 79