summaryrefslogtreecommitdiff
path: root/drivers/soundwire/swr-wcd-ctrl.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/soundwire/swr-wcd-ctrl.h')
-rwxr-xr-xdrivers/soundwire/swr-wcd-ctrl.h106
1 files changed, 106 insertions, 0 deletions
diff --git a/drivers/soundwire/swr-wcd-ctrl.h b/drivers/soundwire/swr-wcd-ctrl.h
new file mode 100755
index 000000000000..b7a3edac3e00
--- /dev/null
+++ b/drivers/soundwire/swr-wcd-ctrl.h
@@ -0,0 +1,106 @@
+/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * 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 _SWR_WCD_CTRL_H
+#define _SWR_WCD_CTRL_H
+#include <linux/module.h>
+#include <linux/soundwire/swr-wcd.h>
+
+#define SWR_MAX_ROW 0 /* Rows = 48 */
+#define SWR_MAX_COL 7 /* Cols = 16 */
+#define SWR_MIN_COL 0 /* Cols = 2 */
+
+#define SWR_WCD_NAME "swr-wcd"
+
+#define SWR_MSTR_PORT_LEN 8 /* Number of master ports */
+
+#define SWRM_VERSION_1_0 0x01010000
+#define SWRM_VERSION_1_2 0x01030000
+#define SWRM_VERSION_1_3 0x01040000
+
+enum {
+ SWR_MSTR_PAUSE,
+ SWR_MSTR_RESUME,
+ SWR_MSTR_UP,
+ SWR_MSTR_DOWN,
+};
+
+enum {
+ SWR_IRQ_FREE,
+ SWR_IRQ_REGISTER,
+};
+
+enum {
+ SWR_DAC_PORT,
+ SWR_COMP_PORT,
+ SWR_BOOST_PORT,
+ SWR_VISENSE_PORT,
+};
+
+struct usecase {
+ u8 num_port;
+ u8 num_ch;
+ u32 chrate;
+};
+
+struct port_params {
+ u8 si;
+ u8 off1;
+ u8 off2;
+};
+
+struct swrm_mports {
+ struct list_head list;
+ u8 id;
+};
+
+struct swr_ctrl_platform_data {
+ void *handle; /* holds priv data */
+ int (*read)(void *handle, int reg);
+ int (*write)(void *handle, int reg, int val);
+ int (*bulk_write)(void *handle, u32 *reg, u32 *val, size_t len);
+ int (*clk)(void *handle, bool enable);
+ int (*reg_irq)(void *handle, irqreturn_t(*irq_handler)(int irq,
+ void *data), void *swr_handle, int type);
+};
+
+struct swr_mstr_ctrl {
+ struct swr_master master;
+ struct device *dev;
+ struct resource *supplies;
+ struct clk *mclk;
+ struct completion reset;
+ struct completion broadcast;
+ struct mutex mlock;
+ struct mutex reslock;
+ u8 rcmd_id;
+ u8 wcmd_id;
+ void *handle; /* SWR Master handle from client for read and writes */
+ int (*read)(void *handle, int reg);
+ int (*write)(void *handle, int reg, int val);
+ int (*bulk_write)(void *handle, u32 *reg, u32 *val, size_t len);
+ int (*clk)(void *handle, bool enable);
+ int (*reg_irq)(void *handle, irqreturn_t(*irq_handler)(int irq,
+ void *data), void *swr_handle, int type);
+ int irq;
+ int version;
+ int num_enum_slaves;
+ int slave_status;
+ struct swr_mstr_port *mstr_port;
+ struct list_head mport_list;
+ int state;
+ struct platform_device *pdev;
+ int num_rx_chs;
+ u8 num_cfg_devs;
+};
+
+#endif /* _SWR_WCD_CTRL_H */