root/sound/soc/codecs/wcd-common.h
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2025, Qualcomm Technologies, Inc. and/or its subsidiaries.
 */

#ifndef __WCD_COMMON_H__
#define __WCD_COMMON_H__

struct device;
struct sdw_slave;
struct sdw_bus_params;
struct irq_domain;
enum sdw_slave_status;

#define WCD_MAX_MICBIAS         4

struct wcd_sdw_ch_info {
        int port_num;
        unsigned int ch_mask;
        unsigned int master_ch_mask;
};

#define WCD_SDW_CH(id, pn, cmask)       \
        [id] = {                        \
                .port_num = pn,         \
                .ch_mask = cmask,       \
                .master_ch_mask = cmask,        \
        }

struct wcd_common {
        struct device *dev;
        int max_bias;
        u32 micb_mv[WCD_MAX_MICBIAS];
        u32 micb_vout[WCD_MAX_MICBIAS];
};

extern const struct component_ops wcd_sdw_component_ops;
int wcd_get_micb_vout_ctl_val(struct device *dev, u32 micb_mv);
int wcd_dt_parse_micbias_info(struct wcd_common *common);
int wcd_update_status(struct sdw_slave *slave, enum sdw_slave_status status);
int wcd_bus_config(struct sdw_slave *slave, struct sdw_bus_params *params);
int wcd_interrupt_callback(struct sdw_slave *slave, struct irq_domain *slave_irq,
                unsigned int wcd_intr_status0, unsigned int wcd_intr_status1,
                unsigned int wcd_intr_status2);

#endif /* __WCD_COMMON_H__  */