18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * linux/sound/cs35l35.h -- Platform data for CS35l35
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (c) 2016 Cirrus Logic Inc.
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef __CS35L35_H
98c2ecf20Sopenharmony_ci#define __CS35L35_H
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_cistruct classh_cfg {
128c2ecf20Sopenharmony_ci	/*
138c2ecf20Sopenharmony_ci	 * Class H Algorithm Control Variables
148c2ecf20Sopenharmony_ci	 * You can either have it done
158c2ecf20Sopenharmony_ci	 * automatically or you can adjust
168c2ecf20Sopenharmony_ci	 * these variables for tuning
178c2ecf20Sopenharmony_ci	 *
188c2ecf20Sopenharmony_ci	 * if you do not enable the internal algorithm
198c2ecf20Sopenharmony_ci	 * you will get a set of mixer controls for
208c2ecf20Sopenharmony_ci	 * Class H tuning
218c2ecf20Sopenharmony_ci	 *
228c2ecf20Sopenharmony_ci	 * Section 4.3 of the datasheet
238c2ecf20Sopenharmony_ci	 */
248c2ecf20Sopenharmony_ci	bool classh_bst_override;
258c2ecf20Sopenharmony_ci	bool classh_algo_enable;
268c2ecf20Sopenharmony_ci	int classh_bst_max_limit;
278c2ecf20Sopenharmony_ci	int classh_mem_depth;
288c2ecf20Sopenharmony_ci	int classh_release_rate;
298c2ecf20Sopenharmony_ci	int classh_headroom;
308c2ecf20Sopenharmony_ci	int classh_wk_fet_disable;
318c2ecf20Sopenharmony_ci	int classh_wk_fet_delay;
328c2ecf20Sopenharmony_ci	int classh_wk_fet_thld;
338c2ecf20Sopenharmony_ci	int classh_vpch_auto;
348c2ecf20Sopenharmony_ci	int classh_vpch_rate;
358c2ecf20Sopenharmony_ci	int classh_vpch_man;
368c2ecf20Sopenharmony_ci};
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_cistruct monitor_cfg {
398c2ecf20Sopenharmony_ci	/*
408c2ecf20Sopenharmony_ci	 * Signal Monitor Data
418c2ecf20Sopenharmony_ci	 * highly configurable signal monitoring
428c2ecf20Sopenharmony_ci	 * data positioning and different types of
438c2ecf20Sopenharmony_ci	 * monitoring data.
448c2ecf20Sopenharmony_ci	 *
458c2ecf20Sopenharmony_ci	 * Section 4.8.2 - 4.8.4 of the datasheet
468c2ecf20Sopenharmony_ci	 */
478c2ecf20Sopenharmony_ci	bool is_present;
488c2ecf20Sopenharmony_ci	bool imon_specs;
498c2ecf20Sopenharmony_ci	bool vmon_specs;
508c2ecf20Sopenharmony_ci	bool vpmon_specs;
518c2ecf20Sopenharmony_ci	bool vbstmon_specs;
528c2ecf20Sopenharmony_ci	bool vpbrstat_specs;
538c2ecf20Sopenharmony_ci	bool zerofill_specs;
548c2ecf20Sopenharmony_ci	u8 imon_dpth;
558c2ecf20Sopenharmony_ci	u8 imon_loc;
568c2ecf20Sopenharmony_ci	u8 imon_frm;
578c2ecf20Sopenharmony_ci	u8 imon_scale;
588c2ecf20Sopenharmony_ci	u8 vmon_dpth;
598c2ecf20Sopenharmony_ci	u8 vmon_loc;
608c2ecf20Sopenharmony_ci	u8 vmon_frm;
618c2ecf20Sopenharmony_ci	u8 vpmon_dpth;
628c2ecf20Sopenharmony_ci	u8 vpmon_loc;
638c2ecf20Sopenharmony_ci	u8 vpmon_frm;
648c2ecf20Sopenharmony_ci	u8 vbstmon_dpth;
658c2ecf20Sopenharmony_ci	u8 vbstmon_loc;
668c2ecf20Sopenharmony_ci	u8 vbstmon_frm;
678c2ecf20Sopenharmony_ci	u8 vpbrstat_dpth;
688c2ecf20Sopenharmony_ci	u8 vpbrstat_loc;
698c2ecf20Sopenharmony_ci	u8 vpbrstat_frm;
708c2ecf20Sopenharmony_ci	u8 zerofill_dpth;
718c2ecf20Sopenharmony_ci	u8 zerofill_loc;
728c2ecf20Sopenharmony_ci	u8 zerofill_frm;
738c2ecf20Sopenharmony_ci};
748c2ecf20Sopenharmony_ci
758c2ecf20Sopenharmony_cistruct cs35l35_platform_data {
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ci	/* Stereo (2 Device) */
788c2ecf20Sopenharmony_ci	bool stereo;
798c2ecf20Sopenharmony_ci	/* serial port drive strength */
808c2ecf20Sopenharmony_ci	int sp_drv_str;
818c2ecf20Sopenharmony_ci	/* serial port drive in unused slots */
828c2ecf20Sopenharmony_ci	int sp_drv_unused;
838c2ecf20Sopenharmony_ci	/* Boost Power Down with FET */
848c2ecf20Sopenharmony_ci	bool bst_pdn_fet_on;
858c2ecf20Sopenharmony_ci	/* Boost Voltage : used if ClassH Algo Enabled */
868c2ecf20Sopenharmony_ci	int bst_vctl;
878c2ecf20Sopenharmony_ci	/* Boost Converter Peak Current CTRL */
888c2ecf20Sopenharmony_ci	int bst_ipk;
898c2ecf20Sopenharmony_ci	/* Amp Gain Zero Cross */
908c2ecf20Sopenharmony_ci	bool gain_zc;
918c2ecf20Sopenharmony_ci	/* Audio Input Location */
928c2ecf20Sopenharmony_ci	int aud_channel;
938c2ecf20Sopenharmony_ci	/* Advisory Input Location */
948c2ecf20Sopenharmony_ci	int adv_channel;
958c2ecf20Sopenharmony_ci	/* Shared Boost for stereo */
968c2ecf20Sopenharmony_ci	bool shared_bst;
978c2ecf20Sopenharmony_ci	/* Specifies this amp is using an external boost supply */
988c2ecf20Sopenharmony_ci	bool ext_bst;
998c2ecf20Sopenharmony_ci	/* Inductor Value */
1008c2ecf20Sopenharmony_ci	int boost_ind;
1018c2ecf20Sopenharmony_ci	/* ClassH Algorithm */
1028c2ecf20Sopenharmony_ci	struct classh_cfg classh_algo;
1038c2ecf20Sopenharmony_ci	/* Monitor Config */
1048c2ecf20Sopenharmony_ci	struct monitor_cfg mon_cfg;
1058c2ecf20Sopenharmony_ci};
1068c2ecf20Sopenharmony_ci
1078c2ecf20Sopenharmony_ci#endif /* __CS35L35_H */
108