/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2019, The Linux Foundation. All rights reserved. */ #ifndef WSA883X_INTERNAL_H #define WSA883X_INTERNAL_H #include "wsa883x.h" #include "wsa883x-registers.h" #ifdef CONFIG_DEBUG_FS #include #include #define SWR_SLV_MAX_REG_ADDR 0x2009 #define SWR_SLV_START_REG_ADDR 0x40 #define SWR_SLV_MAX_BUF_LEN 20 #define BYTES_PER_LINE 12 #define SWR_SLV_RD_BUF_LEN 8 #define SWR_SLV_WR_BUF_LEN 32 #define SWR_SLV_MAX_DEVICES 2 #endif /* CONFIG_DEBUG_FS */ #define WSA883X_DRV_NAME "wsa883x-codec" #define WSA883X_NUM_RETRY 5 #define WSA883X_VERSION_ENTRY_SIZE 27 enum { G_18DB = 0, G_16P5DB, G_15DB, G_13P5DB, G_12DB, G_10P5DB, G_9DB, G_7P5DB, G_6DB, G_4P5DB, G_3DB, G_1P5DB, G_0DB, }; enum { DISABLE = 0, ENABLE, }; enum { SWR_DAC_PORT, SWR_COMP_PORT, SWR_BOOST_PORT, SWR_VISENSE_PORT, }; struct swr_port { u8 port_id; u8 ch_mask; u32 ch_rate; u8 num_ch; u8 port_type; }; enum { WSA883X_DEV_DOWN, WSA883X_DEV_UP, WSA883X_DEV_READY, }; extern struct regmap_config wsa883x_regmap_config; /* * Private data Structure for wsa883x. All parameters related to * WSA883X codec needs to be defined here. */ struct wsa883x_priv { struct regmap *regmap; struct device *dev; struct swr_device *swr_slave; struct snd_soc_component *component; bool comp_enable; bool boost_enable; bool visense_enable; u8 pa_gain; struct swr_port port[WSA883X_MAX_SWR_PORTS]; int pd_gpio; struct wsa883x_tz_priv tz_pdata; int bg_cnt; int clk_cnt; int version; struct mutex bg_lock; struct mutex res_lock; struct mutex temp_lock; struct snd_info_entry *entry; struct snd_info_entry *version_entry; int state; struct delayed_work ocp_ctl_work; struct device_node *wsa_rst_np; int pa_mute; #ifdef CONFIG_DEBUG_FS struct dentry *debugfs_dent; struct dentry *debugfs_peek; struct dentry *debugfs_poke; struct dentry *debugfs_reg_dump; unsigned int read_data; #endif }; static int32_t wsa883x_resource_acquire(struct snd_soc_component *component, bool enable); #endif /* WSA883X_INTERNAL_H */