/*
 * Copyright 2018 NXP
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#ifndef _MXC_HDMI_RX_
#define _MXC_HDMI_RX_

#include <linux/module.h>
#include <linux/mutex.h>

#include <linux/clk.h>
#include <linux/of.h>
#include <linux/of_graph.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-dv-timings.h>
#include <media/v4l2-ioctl.h>
#include <media/v4l2-subdev.h>
#include <soc/imx8/sc/sci.h>
#include <drm/drm_of.h>
#include <drm/drmP.h>

#include <uapi/linux/v4l2-dv-timings.h>

#include "../../../../mxc/hdp/all.h"
#include "../../../../mxc/hdp-cec/imx-hdp-cec.h"

#define state_to_mxc_hdmirx(env) \
	container_of(env, struct mxc_hdmi_rx_dev, state)

#define MXC_HDMI_RX_DRIVER_NAME	"mxc-hdmi-rx"
#define MXC_HDMI_RX_SUBDEV_NAME	MXC_HDMI_RX_DRIVER_NAME

#define MXC_HDMI_RX_NODE_NAME	"hdmi_rx"

#define MXC_HDMI_RX_MAX_DEVS		2
#define MXC_HDMI_RX_MAX_LANES		4

#define MXC_HDMI_RX_PAD_SINK		1
#define MXC_HDMI_RX_PAD_SOURCE		2
#define MXC_HDMI_RX_PADS_NUM		3

#define CSR_PIXEL_LINK_ENC_CTL		0x00
#define PL_ENC_CTL_PXL_VAL          15
#define PL_ENC_CTL_PXL_VPP          14
#define PL_ENC_CTL_PXL_HPP          13
#define PL_ENC_CTL_PXL_VCP          12
#define PL_ENC_CTL_PXL_HCP          11
#define PL_ENC_CTL_PXL_ADD          9
#define PL_ENC_CTL_PXL_EXT          7
#define PL_ENC_CTL_PXL_EN           6
#define PL_ENC_CTL_PXL_ITC          4
#define PL_ENC_CTL_PXL_ODD_EVEN     3
#define PL_ENC_CTL_PXL_TYP          1
#define PL_ENC_CTL_PXL_YUV          0

#define CSR_HDP_RX_CTRL_CTRL0		0x04
#define CSR_HDP_RX_CTRL_CTRL1		0x08

struct mxc_hdmi_rx_dev_video_standards {
	struct v4l2_dv_timings timings;
	u8 vic;
	u8 hdmi_vic;
	u8 fps;
};

enum hdp_rx_irq {
	HPD5V_IRQ_IN,
	HPD5V_IRQ_OUT,
	HPD5V_IRQ_NUM,
};

struct mxc_hdmi_rx_dev {
	struct mutex			lock;
	wait_queue_head_t		irq_queue;
	struct media_pad pads[MXC_HDMI_RX_PADS_NUM];

	struct platform_device		*pdev;
	struct v4l2_device			*v4l2_dev;
	struct v4l2_subdev sd;
	struct v4l2_async_subdev asd;
	struct v4l2_ctrl_handler ctrl_hdl;
	struct v4l2_mbus_framefmt format;
	struct v4l2_fract aspect_ratio;
	struct {
		u8 edid[512];
		u32 present;
		u32 blocks;
	} edid;

	state_struct state;
	struct clk		*sclk;
	struct clk		*pclk;
	struct clk		*ref_clk;
	struct clk		*pxl_clk;
	struct clk		*enc_clk;
	struct clk		*i2s_clk;
	struct clk		*spdif_clk;
	struct clk		*pxl_link_clk;
	struct hdp_mem mem;

	u32 flags;
	sc_ipc_t ipcHndl;
	u32 mu_id;
    S_HDMI_SCDC_GET_MSG          scdcData;

	struct mxc_hdmi_rx_dev_video_standards *timings;
    u8 vic_code;
	u8 hdmi_vic;
    u8 pixel_encoding;
	u8 color_depth;
	bool cable_plugin;

	u8 is_cec;
	bool cec_running;
	struct imx_cec_dev cec;
	u32 sample_rate;
	u32 sample_width;
	u32 channels;

	int irq[HPD5V_IRQ_NUM];
	struct delayed_work hpd5v_work;
};

enum mxc_hdmi_rx_power_state {
	MXC_HDMI_RX_PM_SUSPENDED = 0x01,
	MXC_HDMI_RX_PM_POWERED = 0x02,
	MXC_HDMI_RX_RUNTIME_SUSPEND = 0x04,
};

void hdmirx_stop(state_struct *state);
void hdmirx_hotplug_trigger(state_struct *state);
void hdmirx_phy_pix_engine_reset(state_struct *state);
int hdmirx_startup(state_struct *state);
int hdmirx_init(state_struct *state);
int hdmirx_get_hpd_state(state_struct *state, u8 *hpd);
int mxc_hdmi_frame_timing(struct mxc_hdmi_rx_dev *hdmi_rx);
void mxc_hdmi_rx_register_audio_driver(struct device *dev);
void imx8qm_hdmi_phy_reset(state_struct *state, u8 reset);

#endif
