sound/soc/codecs/rt-sdw-common.c

Source file repositories/reference/linux-study-clean/sound/soc/codecs/rt-sdw-common.c

File Facts

System
Linux kernel
Corpus path
sound/soc/codecs/rt-sdw-common.c
Extension
.c
Size
5628 bytes
Lines
239
Domain
Driver Families
Bucket
sound/soc
Inferred role
Driver Families: exported/initcall integration point
Status
integration implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

// SPDX-License-Identifier: GPL-2.0-only
//
// rt-sdw-common.c
//
// Copyright(c) 2024 Realtek Semiconductor Corp.
//

/*
 * This file defines common functions used with Realtek soundwire codecs.
 */

#include <linux/module.h>
#include <linux/regmap.h>
#include <linux/bitops.h>
#include <linux/soundwire/sdw_registers.h>
#include <sound/jack.h>

#include "rt-sdw-common.h"

/**
 * rt_sdca_index_write - Write a value to Realtek defined register.
 *
 * @map: map for setting.
 * @nid: Realtek-defined ID.
 * @reg: register.
 * @value: value.
 *
 * A value of zero will be returned on success, a negative errno will
 * be returned in error cases.
 */
int rt_sdca_index_write(struct regmap *map, unsigned int nid,
	unsigned int reg, unsigned int value)
{
	unsigned int addr = (nid << 20) | reg;
	int ret;

	ret = regmap_write(map, addr, value);
	if (ret < 0)
		pr_err("Failed to set value: %06x <= %04x ret=%d\n",
			addr, value, ret);

	return ret;
}
EXPORT_SYMBOL_GPL(rt_sdca_index_write);

/**
 * rt_sdca_index_read - Read value from Realtek defined register.
 *
 * @map: map for setting.
 * @nid: Realtek-defined ID.
 * @reg: register.
 * @value: value.
 *
 * A value of zero will be returned on success, a negative errno will
 * be returned in error cases.
 */
int rt_sdca_index_read(struct regmap *map, unsigned int nid,
	unsigned int reg, unsigned int *value)
{
	unsigned int addr = (nid << 20) | reg;
	int ret;

	ret = regmap_read(map, addr, value);
	if (ret < 0)
		pr_err("Failed to get value: %06x => %04x ret=%d\n",
			addr, *value, ret);

	return ret;
}
EXPORT_SYMBOL_GPL(rt_sdca_index_read);

/**
 * rt_sdca_index_update_bits - Update value on Realtek defined register.
 *
 * @map: map for setting.
 * @nid: Realtek-defined ID.
 * @reg: register.
 * @mask: Bitmask to change
 * @val: New value for bitmask
 *
 * A value of zero will be returned on success, a negative errno will
 * be returned in error cases.
 */

int rt_sdca_index_update_bits(struct regmap *map,
	unsigned int nid, unsigned int reg, unsigned int mask, unsigned int val)
{
	unsigned int tmp;
	int ret;

Annotation

Implementation Notes