linux/include/linux/mfd/cs40l50.h

/* SPDX-License-Identifier: GPL-2.0
 *
 * CS40L50 Advanced Haptic Driver with waveform memory,
 * integrated DSP, and closed-loop algorithms
 *
 * Copyright 2024 Cirrus Logic, Inc.
 *
 * Author: James Ogletree <[email protected]>
 */

#ifndef __MFD_CS40L50_H__
#define __MFD_CS40L50_H__

#include <linux/firmware/cirrus/cs_dsp.h>
#include <linux/gpio/consumer.h>
#include <linux/pm.h>
#include <linux/regmap.h>

/* Power Supply Configuration */
#define CS40L50_BLOCK_ENABLES2
#define CS40L50_ERR_RLS
#define CS40L50_BST_LPMODE_SEL
#define CS40L50_DCM_LOW_POWER
#define CS40L50_OVERTEMP_WARN

/* Interrupts */
#define CS40L50_IRQ1_INT_1
#define CS40L50_IRQ1_BASE
#define CS40L50_IRQ1_INT_2
#define CS40L50_IRQ1_INT_8
#define CS40L50_IRQ1_INT_9
#define CS40L50_IRQ1_INT_10
#define CS40L50_IRQ1_INT_18
#define CS40L50_IRQ1_MASK_1
#define CS40L50_IRQ1_MASK_2
#define CS40L50_IRQ1_MASK_20
#define CS40L50_IRQ1_INT_1_OFFSET
#define CS40L50_IRQ1_INT_2_OFFSET
#define CS40L50_IRQ1_INT_8_OFFSET
#define CS40L50_IRQ1_INT_9_OFFSET
#define CS40L50_IRQ1_INT_10_OFFSET
#define CS40L50_IRQ1_INT_18_OFFSET
#define CS40L50_IRQ_MASK_2_OVERRIDE
#define CS40L50_IRQ_MASK_20_OVERRIDE
#define CS40L50_AMP_SHORT_MASK
#define CS40L50_DSP_QUEUE_MASK
#define CS40L50_TEMP_ERR_MASK
#define CS40L50_BST_UVP_MASK
#define CS40L50_BST_SHORT_MASK
#define CS40L50_BST_ILIMIT_MASK
#define CS40L50_UVLO_VDDBATT_MASK
#define CS40L50_GLOBAL_ERROR_MASK

enum cs40l50_irq_list {};

/* DSP */
#define CS40L50_XMEM_PACKED_0
#define CS40L50_XMEM_UNPACKED24_0
#define CS40L50_SYS_INFO_ID
#define CS40L50_DSP_QUEUE_WT
#define CS40L50_DSP_QUEUE_RD
#define CS40L50_NUM_WAVES
#define CS40L50_CORE_BASE
#define CS40L50_YMEM_PACKED_0
#define CS40L50_YMEM_UNPACKED24_0
#define CS40L50_PMEM_0
#define CS40L50_DSP_POLL_US
#define CS40L50_DSP_TIMEOUT_COUNT
#define CS40L50_RESET_PULSE_US
#define CS40L50_CP_READY_US
#define CS40L50_AUTOSUSPEND_MS
#define CS40L50_PM_ALGO
#define CS40L50_GLOBAL_ERR_RLS_SET
#define CS40L50_GLOBAL_ERR_RLS_CLEAR

enum cs40l50_wseqs {};

/* DSP Queue */
#define CS40L50_DSP_QUEUE_BASE
#define CS40L50_DSP_QUEUE_END
#define CS40L50_DSP_QUEUE
#define CS40L50_PREVENT_HIBER
#define CS40L50_ALLOW_HIBER
#define CS40L50_SHUTDOWN
#define CS40L50_SYSTEM_RESET
#define CS40L50_START_I2S
#define CS40L50_OWT_PUSH
#define CS40L50_STOP_PLAYBACK
#define CS40L50_OWT_DELETE

/* Firmware files */
#define CS40L50_FW
#define CS40L50_WT

/* Device */
#define CS40L50_DEVID
#define CS40L50_REVID
#define CS40L50_DEVID_A
#define CS40L50_REVID_B0

struct cs40l50 {};

int cs40l50_dsp_write(struct device *dev, struct regmap *regmap, u32 val);
int cs40l50_probe(struct cs40l50 *cs40l50);
int cs40l50_remove(struct cs40l50 *cs40l50);

extern const struct regmap_config cs40l50_regmap;
extern const struct dev_pm_ops cs40l50_pm_ops;

#endif /* __MFD_CS40L50_H__ */