123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- /* Copyright (c) 2015-2018, 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 <soc/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
- #define SWRM_VERSION_1_5 0x01050000
- #define SWR_MAX_CH_PER_PORT 8
- #define SWR_MAX_SLAVE_DEVICES 11
- enum {
- SWR_MSTR_PAUSE,
- SWR_MSTR_RESUME,
- SWR_MSTR_UP,
- SWR_MSTR_DOWN,
- SWR_MSTR_SSR,
- };
- 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 port_req_list;
- bool port_en;
- u8 ch_en;
- u8 req_ch;
- u8 ch_rate;
- u8 offset1;
- u8 offset2;
- u8 sinterval;
- u8 hstart;
- u8 hstop;
- u8 blk_grp_count;
- u8 blk_pack_mode;
- };
- struct swrm_port_type {
- u8 port_type;
- u8 ch_mask;
- };
- 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;
- int clk_ref_count;
- struct completion reset;
- struct completion broadcast;
- struct mutex mlock;
- struct mutex reslock;
- u32 swrm_base_reg;
- char __iomem *swrm_dig_base;
- 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;
- u32 num_dev;
- int slave_status;
- struct swrm_mports mport_cfg[SWR_MAX_MSTR_PORT_NUM];
- struct list_head port_req_list;
- int state;
- struct platform_device *pdev;
- int num_rx_chs;
- u8 num_cfg_devs;
- struct mutex force_down_lock;
- int force_down_state;
- u8 num_ports;
- struct swrm_port_type
- port_mapping[SWR_MSTR_PORT_LEN][SWR_MAX_CH_PER_PORT];
- int swr_irq;
- };
- #endif /* _SWR_WCD_CTRL_H */
|