162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * TI j721e Cadence DSI wrapper
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2022 Texas Instruments Incorporated - http://www.ti.com/
662306a36Sopenharmony_ci * Author: Rahul T R <r-ravikumar@ti.com>
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/io.h>
1062306a36Sopenharmony_ci#include <linux/platform_device.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include "cdns-dsi-j721e.h"
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#define DSI_WRAP_REVISION		0x0
1562306a36Sopenharmony_ci#define DSI_WRAP_DPI_CONTROL		0x4
1662306a36Sopenharmony_ci#define DSI_WRAP_DSC_CONTROL		0x8
1762306a36Sopenharmony_ci#define DSI_WRAP_DPI_SECURE		0xc
1862306a36Sopenharmony_ci#define DSI_WRAP_DSI_0_ASF_STATUS	0x10
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci#define DSI_WRAP_DPI_0_EN		BIT(0)
2162306a36Sopenharmony_ci#define DSI_WRAP_DSI2_MUX_SEL		BIT(4)
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cistatic int cdns_dsi_j721e_init(struct cdns_dsi *dsi)
2462306a36Sopenharmony_ci{
2562306a36Sopenharmony_ci	struct platform_device *pdev = to_platform_device(dsi->base.dev);
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci	dsi->j721e_regs = devm_platform_ioremap_resource(pdev, 1);
2862306a36Sopenharmony_ci	return PTR_ERR_OR_ZERO(dsi->j721e_regs);
2962306a36Sopenharmony_ci}
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_cistatic void cdns_dsi_j721e_enable(struct cdns_dsi *dsi)
3262306a36Sopenharmony_ci{
3362306a36Sopenharmony_ci	/*
3462306a36Sopenharmony_ci	 * Enable DPI0 as its input. DSS0 DPI2 is connected
3562306a36Sopenharmony_ci	 * to DSI DPI0. This is the only supported configuration on
3662306a36Sopenharmony_ci	 * J721E.
3762306a36Sopenharmony_ci	 */
3862306a36Sopenharmony_ci	writel(DSI_WRAP_DPI_0_EN, dsi->j721e_regs + DSI_WRAP_DPI_CONTROL);
3962306a36Sopenharmony_ci}
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_cistatic void cdns_dsi_j721e_disable(struct cdns_dsi *dsi)
4262306a36Sopenharmony_ci{
4362306a36Sopenharmony_ci	/* Put everything to defaults  */
4462306a36Sopenharmony_ci	writel(0, dsi->j721e_regs + DSI_WRAP_DPI_CONTROL);
4562306a36Sopenharmony_ci}
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciconst struct cdns_dsi_platform_ops dsi_ti_j721e_ops = {
4862306a36Sopenharmony_ci	.init = cdns_dsi_j721e_init,
4962306a36Sopenharmony_ci	.enable = cdns_dsi_j721e_enable,
5062306a36Sopenharmony_ci	.disable = cdns_dsi_j721e_disable,
5162306a36Sopenharmony_ci};
52