Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071/* SPDX-License-Identifier: GPL-2.0 *//* * The MIPI SDCA specification is available for public downloads at * https://www.mipi.org/mipi-sdca-v1-0-download * * Copyright (C) 2025 Cirrus Logic, Inc. and * Cirrus Logic International Semiconductor Ltd. */
#ifndef __SDCA_CLASS_H__#define __SDCA_CLASS_H__
#include <linux/completion.h>#include <linux/mutex.h>#include <linux/workqueue.h>
struct device;struct regmap;struct sdw_slave;struct sdca_function_data;
/** * struct sdca_class_ops - optional codec-provided class callbacks * @populate_function: fill @function (entities, clusters, init_table, ...) * from static tables in place of sdca_parse_function() on * DT/non-DisCo platforms. Called once per SDCA function with * @dev pointing at that function's device. Pure data source; * performs no bus I/O. Return 0 on success or a negative errno. */struct sdca_class_ops { int (*populate_function)(struct device *dev, struct sdca_function_data *function);};
struct sdca_class_drv { struct device *dev; struct regmap *dev_regmap; struct sdw_slave *sdw;
struct sdca_interrupt_info *irq_info;
const struct sdca_class_ops *ops;
struct mutex regmap_lock; /* Serialise function initialisations */ struct mutex init_lock; struct work_struct boot_work;};
/* Library helpers used by codec-specific SDCA SoundWire drivers. */int sdca_class_probe(struct sdw_slave *sdw, struct sdca_class_drv *drv, const struct sdca_class_ops *ops);void sdca_class_remove(struct sdca_class_drv *drv);
/* * PM helpers. Codec drivers embed sdca_class_drv in their own priv, * own dev_set_drvdata(), and compose these into their own dev_pm_ops: * * static int wcd_runtime_suspend(struct device *dev) { * struct wcd_priv *priv = dev_get_drvdata(dev); * return sdca_class_runtime_suspend(&priv->class); * } */int sdca_class_runtime_suspend(struct sdca_class_drv *drv);int sdca_class_runtime_resume(struct sdca_class_drv *drv);int sdca_class_system_suspend(struct sdca_class_drv *drv);int sdca_class_system_resume(struct sdca_class_drv *drv);
#endif /* __SDCA_CLASS_H__ */