1*2874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 21bcbf6f4SKamil Debski /* drivers/media/platform/s5p-cec/s5p_cec.h 31bcbf6f4SKamil Debski * 41bcbf6f4SKamil Debski * Samsung S5P HDMI CEC driver 51bcbf6f4SKamil Debski * 61bcbf6f4SKamil Debski * Copyright (c) 2014 Samsung Electronics Co., Ltd. 71bcbf6f4SKamil Debski */ 81bcbf6f4SKamil Debski 91bcbf6f4SKamil Debski #ifndef _S5P_CEC_H_ 101bcbf6f4SKamil Debski #define _S5P_CEC_H_ __FILE__ 111bcbf6f4SKamil Debski 121bcbf6f4SKamil Debski #include <linux/clk.h> 131bcbf6f4SKamil Debski #include <linux/interrupt.h> 141bcbf6f4SKamil Debski #include <linux/kernel.h> 151bcbf6f4SKamil Debski #include <linux/mfd/syscon.h> 161bcbf6f4SKamil Debski #include <linux/module.h> 171bcbf6f4SKamil Debski #include <linux/of.h> 181bcbf6f4SKamil Debski #include <linux/platform_device.h> 191bcbf6f4SKamil Debski #include <linux/pm_runtime.h> 201bcbf6f4SKamil Debski #include <linux/timer.h> 211bcbf6f4SKamil Debski #include <linux/workqueue.h> 221bcbf6f4SKamil Debski #include <media/cec.h> 231bcbf6f4SKamil Debski 241bcbf6f4SKamil Debski #include "exynos_hdmi_cec.h" 251bcbf6f4SKamil Debski #include "regs-cec.h" 261bcbf6f4SKamil Debski #include "s5p_cec.h" 271bcbf6f4SKamil Debski 281bcbf6f4SKamil Debski #define CEC_NAME "s5p-cec" 291bcbf6f4SKamil Debski 301bcbf6f4SKamil Debski #define CEC_STATUS_TX_RUNNING (1 << 0) 311bcbf6f4SKamil Debski #define CEC_STATUS_TX_TRANSFERRING (1 << 1) 321bcbf6f4SKamil Debski #define CEC_STATUS_TX_DONE (1 << 2) 331bcbf6f4SKamil Debski #define CEC_STATUS_TX_ERROR (1 << 3) 34e949f614SHans Verkuil #define CEC_STATUS_TX_NACK (1 << 4) 351bcbf6f4SKamil Debski #define CEC_STATUS_TX_BYTES (0xFF << 8) 361bcbf6f4SKamil Debski #define CEC_STATUS_RX_RUNNING (1 << 16) 371bcbf6f4SKamil Debski #define CEC_STATUS_RX_RECEIVING (1 << 17) 381bcbf6f4SKamil Debski #define CEC_STATUS_RX_DONE (1 << 18) 391bcbf6f4SKamil Debski #define CEC_STATUS_RX_ERROR (1 << 19) 401bcbf6f4SKamil Debski #define CEC_STATUS_RX_BCAST (1 << 20) 411bcbf6f4SKamil Debski #define CEC_STATUS_RX_BYTES (0xFF << 24) 421bcbf6f4SKamil Debski 431bcbf6f4SKamil Debski #define CEC_WORKER_TX_DONE (1 << 0) 441bcbf6f4SKamil Debski #define CEC_WORKER_RX_MSG (1 << 1) 451bcbf6f4SKamil Debski 461bcbf6f4SKamil Debski /* CEC Rx buffer size */ 471bcbf6f4SKamil Debski #define CEC_RX_BUFF_SIZE 16 481bcbf6f4SKamil Debski /* CEC Tx buffer size */ 491bcbf6f4SKamil Debski #define CEC_TX_BUFF_SIZE 16 501bcbf6f4SKamil Debski 511bcbf6f4SKamil Debski enum cec_state { 521bcbf6f4SKamil Debski STATE_IDLE, 531bcbf6f4SKamil Debski STATE_BUSY, 541bcbf6f4SKamil Debski STATE_DONE, 55e949f614SHans Verkuil STATE_NACK, 561bcbf6f4SKamil Debski STATE_ERROR 571bcbf6f4SKamil Debski }; 581bcbf6f4SKamil Debski 59a93d429bSHans Verkuil struct cec_notifier; 60a93d429bSHans Verkuil 611bcbf6f4SKamil Debski struct s5p_cec_dev { 621bcbf6f4SKamil Debski struct cec_adapter *adap; 631bcbf6f4SKamil Debski struct clk *clk; 641bcbf6f4SKamil Debski struct device *dev; 651bcbf6f4SKamil Debski struct mutex lock; 661bcbf6f4SKamil Debski struct regmap *pmu; 67a93d429bSHans Verkuil struct cec_notifier *notifier; 681bcbf6f4SKamil Debski int irq; 691bcbf6f4SKamil Debski void __iomem *reg; 701bcbf6f4SKamil Debski 711bcbf6f4SKamil Debski enum cec_state rx; 721bcbf6f4SKamil Debski enum cec_state tx; 731bcbf6f4SKamil Debski struct cec_msg msg; 741bcbf6f4SKamil Debski }; 751bcbf6f4SKamil Debski 761bcbf6f4SKamil Debski #endif /* _S5P_CEC_H_ */ 77