diff options
Diffstat (limited to 'arch/arm/mach-omap2/omap-iommu.c')
| -rw-r--r-- | arch/arm/mach-omap2/omap-iommu.c | 43 | 
1 files changed, 43 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/omap-iommu.c b/arch/arm/mach-omap2/omap-iommu.c new file mode 100644 index 000000000000..f1a6ece8108e --- /dev/null +++ b/arch/arm/mach-omap2/omap-iommu.c @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * OMAP IOMMU quirks for various TI SoCs + * + * Copyright (C) 2015-2019 Texas Instruments Incorporated - http://www.ti.com/ + *      Suman Anna <[email protected]> + */ + +#include <linux/platform_device.h> +#include <linux/err.h> + +#include "omap_hwmod.h" +#include "omap_device.h" +#include "powerdomain.h" + +int omap_iommu_set_pwrdm_constraint(struct platform_device *pdev, bool request, +				    u8 *pwrst) +{ +	struct powerdomain *pwrdm; +	struct omap_device *od; +	u8 next_pwrst; + +	od = to_omap_device(pdev); +	if (!od) +		return -ENODEV; + +	if (od->hwmods_cnt != 1) +		return -EINVAL; + +	pwrdm = omap_hwmod_get_pwrdm(od->hwmods[0]); +	if (!pwrdm) +		return -EINVAL; + +	if (request) +		*pwrst = pwrdm_read_next_pwrst(pwrdm); + +	if (*pwrst > PWRDM_POWER_RET) +		return 0; + +	next_pwrst = request ? PWRDM_POWER_ON : *pwrst; + +	return pwrdm_set_next_pwrst(pwrdm, next_pwrst); +}  |