ASoC: wsa883x: Add support for wsa883x speaker amplifer

WSA883x is a speaker amplifier with soundwire interface and
enumerates as soundwire slave. WSA883x supports audio playback
on speakers and has temperature sensors for better speaker
protection and enhanced boost control support. Add software
driver support to enable WSA883x speaker amplifier.

Change-Id: Ib9cf2eebdda5ce331154bc786f059c5757f34fa2
Signed-off-by: Sudheer Papothi <spapothi@codeaurora.org>
This commit is contained in:
Sudheer Papothi
2019-09-09 09:52:21 +05:30
szülő 63a3452c9c
commit af0a66b78a
10 fájl változott, egészen pontosan 2823 új sor hozzáadva és 0 régi sor törölve

Fájl megtekintése

@@ -0,0 +1,113 @@
/* 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 <linux/debugfs.h>
#include <linux/uaccess.h>
#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 */