brintos

brintos / linux-shallow public Read only

0
0
Text · 2.4 KiB · c730b33 Raw
110 lines · c
1/* SPDX-License-Identifier: GPL-2.02 *3 * CS35L41 ALSA HDA audio driver4 *5 * Copyright 2021 Cirrus Logic, Inc.6 *7 * Author: Lucas Tanure <tanureal@opensource.cirrus.com>8 */9 10#ifndef __CS35L41_HDA_H__11#define __CS35L41_HDA_H__12 13#include <linux/acpi.h>14#include <linux/efi.h>15#include <linux/regulator/consumer.h>16#include <linux/gpio/consumer.h>17#include <linux/device.h>18#include <sound/cs35l41.h>19#include <sound/cs-amp-lib.h>20 21#include <linux/firmware/cirrus/cs_dsp.h>22#include <linux/firmware/cirrus/wmfw.h>23 24#define CS35L41_MAX_ACCEPTABLE_SPI_SPEED_HZ	100000025#define DEFAULT_AMP_GAIN_PCM			17	/* 17.5dB Gain */26#define DEFAULT_AMP_GAIN_PDM			19	/* 19.5dB Gain */27 28struct cs35l41_amp_cal_data {29	u32 calTarget[2];30	u32 calTime[2];31	s8 calAmbient;32	u8 calStatus;33	u16 calR;34} __packed;35 36struct cs35l41_amp_efi_data {37	u32 size;38	u32 count;39	struct cs35l41_amp_cal_data data[];40} __packed;41 42enum cs35l41_hda_spk_pos {43	CS35L41_LEFT,44	CS35L41_RIGHT,45};46 47enum cs35l41_hda_gpio_function {48	CS35L41_NOT_USED,49	CS35l41_VSPK_SWITCH,50	CS35L41_INTERRUPT,51	CS35l41_SYNC,52};53 54enum control_bus {55	I2C,56	SPI57};58 59struct cs35l41_hda {60	struct device *dev;61	struct regmap *regmap;62	struct gpio_desc *reset_gpio;63	struct gpio_desc *cs_gpio;64	struct cs35l41_hw_cfg hw_cfg;65	struct hda_codec *codec;66 67	int irq;68	int index;69	int channel_index;70	unsigned volatile long irq_errors;71	const char *amp_name;72	const char *acpi_subsystem_id;73	int firmware_type;74	int speaker_id;75	struct mutex fw_mutex;76	struct work_struct fw_load_work;77 78	struct regmap_irq_chip_data *irq_data;79	bool firmware_running;80	bool request_fw_load;81	bool fw_request_ongoing;82	bool halo_initialized;83	bool playback_started;84	struct cs_dsp cs_dsp;85	struct acpi_device *dacpi;86	bool mute_override;87	enum control_bus control_bus;88	bool bypass_fw;89	unsigned int tuning_gain;90	struct cirrus_amp_cal_data cal_data;91	bool cal_data_valid;92 93};94 95enum halo_state {96	HALO_STATE_CODE_INIT_DOWNLOAD = 0,97	HALO_STATE_CODE_START,98	HALO_STATE_CODE_RUN99};100 101extern const struct dev_pm_ops cs35l41_hda_pm_ops;102 103int cs35l41_hda_probe(struct device *dev, const char *device_name, int id, int irq,104		      struct regmap *regmap, enum control_bus control_bus);105void cs35l41_hda_remove(struct device *dev);106int cs35l41_get_speaker_id(struct device *dev, int amp_index, int num_amps, int fixed_gpio_id);107int cs35l41_hda_parse_acpi(struct cs35l41_hda *cs35l41, struct device *physdev, int id);108 109#endif /*__CS35L41_HDA_H__*/110