summaryrefslogtreecommitdiff
path: root/cs40l26/cs40l26.h
diff options
context:
space:
mode:
authorTai Kuo <taikuo@google.com>2022-03-04 15:05:33 +0800
committerTai Kuo <taikuo@google.com>2022-03-04 09:33:10 +0000
commitd58df7442c6163bd2233ab38814565f5f2d7539c (patch)
treebdda15e209f632ba97b453fb937bbab3f99ee7e4 /cs40l26/cs40l26.h
parent4edf770fd08f672a72131cf2fc60b36edd46e773 (diff)
downloadamplifiers-d58df7442c6163bd2233ab38814565f5f2d7539c.tar.gz
cs40l26: merge dsp v3.1.7, cs40l26 v4.0.2 and v4.0.3
Branch: v5.10-cirrus-dsp-fw Tag: cl-dsp-fw-v3.1.7_5.10 Files: drivers/firmware/cirrus/cl_dsp.c include/linux/firmware/cirrus/cl_dsp.h Bug fixes: - Replace strlcpy() instances with strscpy() - Improved error reporting for invalid algo. rev - Minor typo fix Commits: 0a2a7f7 firmware: cirrus: Fix typo 332111a firmware: cirrus: Improve error reporting for invalid algo. rev. ec97039 firmware: cirrus: Use strscpy for string copying --- Branch: v5.10-cs40l26 Tag: cs40l26-v4.0.2_5.10, cs40l26-v4.0.3_5.10 Files: drivers/input/misc/cs40l26-i2c.c (No changes) drivers/input/misc/cs40l26-spi.c (No changes) drivers/input/misc/cs40l26-sysfs.c drivers/input/misc/cs40l26-tables.c drivers/input/misc/cs40l26.c include/linux/mfd/cs40l26.h sound/soc/codecs/cs40l26.c -> cs40l26-codec.c Features: - Allow swapping firmwares of the same type (runtime/calibration) - Add support for Dynamic Boost Control via sysfs controls - Extend range of PM timeouts Bug fixes: - Fixes bug in which PSEQ list terminator was not being reset between firmware swaps. - Appropriately clear GPI mapping after erasing waveform Commits: tag: cs40l26-v4.0.3_5.10 0c520ef input: cs40l26: Reset PSEQ END_OF_SCRIPT on fw swap 956d534 input: cs40l26: Check pseq mem before adding op tag: cs40l26-v4.0.2_5.10 4a9f5e3 input: cs40l26: Update SVC tuning file name size 882895f input: cs40l26: Loosen restriction on firmware swapping 5c7f770 input: cs40l26: Use strscpy for string copying 0700a83 ASoC: cs40l26: Update Handling of SVC for ASP Streaming cfeac58 input: cs40l26: Add user controls for Dynamic Boost 6068def input: cs40l26: Update PM Transition Timeout Limits b65b511 input: cs40l26: Fix value to disable gpi triggers Bug: 222620491 Test: idlcli commands. Test: Firmware switching and then trigger haptics Test: Continuous index 0 haptics Test: Continuous index 9 hatpcis Signed-off-by: Tai Kuo <taikuo@google.com> Change-Id: Ic2eaca8fe2cce9ef0c4b03460ddca791ad57d852
Diffstat (limited to 'cs40l26/cs40l26.h')
-rw-r--r--cs40l26/cs40l26.h39
1 files changed, 35 insertions, 4 deletions
diff --git a/cs40l26/cs40l26.h b/cs40l26/cs40l26.h
index c08c3ab..5ac0a19 100644
--- a/cs40l26/cs40l26.h
+++ b/cs40l26/cs40l26.h
@@ -703,6 +703,7 @@
#define CS40L26_EXT_ALGO_ID 0x0004013C
/* power management */
+#define CS40L26_PSEQ_ROM_OFFSET_WORDS_A1 24
#define CS40L26_PSEQ_MAX_WORDS_PER_OP CS40L26_PSEQ_OP_WRITE_FIELD_WORDS
#define CS40L26_PSEQ_MAX_WORDS 129
#define CS40L26_PSEQ_NUM_OPS 8
@@ -747,9 +748,8 @@
#define CS40L26_PM_STDBY_TIMEOUT_LOWER_OFFSET 16
#define CS40L26_PM_STDBY_TIMEOUT_UPPER_OFFSET 20
-#define CS40L26_PM_STDBY_TIMEOUT_MS_DEFAULT 5000
-#define CS40L26_PM_TIMEOUT_MS_MIN 100
-#define CS40L26_PM_TIMEOUT_MS_MAX 4880
+#define CS40L26_PM_STDBY_TIMEOUT_MS_DEFAULT 100
+#define CS40L26_PM_TIMEOUT_MS_MAX 10000
#define CS40L26_PM_ACTIVE_TIMEOUT_LOWER_OFFSET 24
#define CS40L26_PM_ACTIVE_TIMEOUT_UPPER_OFFSET 28
#define CS40L26_PM_ACTIVE_TIMEOUT_MS_DEFAULT 250
@@ -837,7 +837,7 @@
#define CS40L26_SVC_TUNING_FILE_PREFIX "cs40l26-svc"
#define CS40L26_SVC_TUNING_FILE_PREFIX_LEN 12
#define CS40L26_SVC_TUNING_FILE_NAME "cs40l26-svc.bin"
-#define CS40L26_SVC_TUNING_FILE_NAME_LEN 16
+#define CS40L26_SVC_TUNING_FILE_NAME_LEN 17
#define CS40L26_A2H_TUNING_FILE_NAME "cs40l26-a2h.bin"
#define CS40L26_A2H_TUNING_FILE_NAME_LEN 16
#define CS40L26_TUNING_FILE_NAME_MAX_LEN 20
@@ -926,6 +926,7 @@
#define CS40L26_GPIO1 1
#define CS40L26_EVENT_MAP_INDEX_MASK GENMASK(8, 0)
#define CS40L26_EVENT_MAP_NUM_GPI_REGS 4
+#define CS40L26_EVENT_MAP_GPI_EVENT_DISABLE 0x1FF
#define CS40L26_BTN_INDEX_MASK GENMASK(7, 0)
#define CS40L26_BTN_BUZZ_MASK BIT(7)
@@ -1229,6 +1230,20 @@
#define CS40L26_COMP_EN_REDC_SHIFT 1
#define CS40L26_COMP_EN_F0_SHIFT 0
+/* FW EXT */
+#define CS40L26_SVC_FOR_STREAMING_MASK BIT(0)
+
+/* DBC */
+#define CS40L26_DBC_ENABLE_MASK BIT(1)
+#define CS40L26_DBC_ENABLE_SHIFT 1
+#define CS40L26_DBC_TX_LVL_HOLD_OFF_MS_MAX 1000
+#define CS40L26_DBC_CONTROLS_MAX 0x7FFFFF
+#define CS40L26_DBC_ENV_REL_COEF_NAME "DBC_ENV_REL_COEF"
+#define CS40L26_DBC_RISE_HEADROOM_NAME "DBC_RISE_HEADROOM"
+#define CS40L26_DBC_FALL_HEADROOM_NAME "DBC_FALL_HEADROOM"
+#define CS40L26_DBC_TX_LVL_THRESH_FS_NAME "DBC_TX_LVL_THRESH_FS"
+#define CS40L26_DBC_TX_LVL_HOLD_OFF_MS_NAME "DBC_TX_LVL_HOLD_OFF_MS"
+
/* Errata */
#define CS40L26_ERRATA_A1_NUM_WRITES 4
#define CS40L26_ERRATA_A1_EXPL_EN_NUM_WRITES 1
@@ -1253,6 +1268,15 @@
#define CS40L26_SAMPS_TO_MS(n) ((n) / 8)
/* enums */
+enum cs40l26_dbc {
+ CS40L26_DBC_ENV_REL_COEF, /* 0 */
+ CS40L26_DBC_RISE_HEADROOM,
+ CS40L26_DBC_FALL_HEADROOM,
+ CS40L26_DBC_TX_LVL_THRESH_FS,
+ CS40L26_DBC_TX_LVL_HOLD_OFF_MS,
+ CS40L26_DBC_NUM_CONTROLS, /* 5 */
+};
+
enum cs40l26_vibe_state {
CS40L26_VIBE_STATE_STOPPED,
CS40L26_VIBE_STATE_HAPTIC,
@@ -1362,6 +1386,7 @@ enum cs40l26_pm_state {
/* structs */
struct cs40l26_fw {
unsigned int id;
+ unsigned int rev;
unsigned int min_rev;
unsigned int num_coeff_files;
char **coeff_files;
@@ -1504,6 +1529,10 @@ struct cs40l26_pll_sysclk_config {
};
/* exported function prototypes */
+int cs40l26_dbc_get(struct cs40l26_private *cs40l26, enum cs40l26_dbc dbc,
+ unsigned int *val);
+int cs40l26_dbc_set(struct cs40l26_private *cs40l26, enum cs40l26_dbc dbc,
+ const char *buf);
int cs40l26_asp_start(struct cs40l26_private *cs40l26);
int cs40l26_get_num_waves(struct cs40l26_private *cs40l26, u32 *num_waves);
int cs40l26_fw_swap(struct cs40l26_private *cs40l26, u32 id);
@@ -1547,10 +1576,12 @@ extern const u8 cs40l26_pseq_op_sizes[CS40L26_PSEQ_NUM_OPS][2];
extern const u32 cs40l26_attn_q21_2_vals[CS40L26_NUM_PCT_MAP_VALUES];
extern const struct reg_sequence
cs40l26_a1_errata[CS40L26_ERRATA_A1_NUM_WRITES];
+extern const char * const cs40l26_dbc_names[CS40L26_DBC_NUM_CONTROLS];
/* sysfs */
extern struct attribute_group cs40l26_dev_attr_group;
extern struct attribute_group cs40l26_dev_attr_cal_group;
+extern struct attribute_group cs40l26_dev_attr_dbc_group;
#endif /* __CS40L26_H__ */