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