drivers/mfd/cs47l15-tables.c
Source file repositories/reference/linux-study-clean/drivers/mfd/cs47l15-tables.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/mfd/cs47l15-tables.c- Extension
.c- Size
- 64968 bytes
- Lines
- 1301
- Domain
- Driver Families
- Bucket
- drivers/mfd
- 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.
- 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.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/device.hlinux/module.hlinux/regmap.hlinux/mfd/madera/core.hlinux/mfd/madera/registers.hmadera.h
Detected Declarations
function cs47l15_patchfunction cs47l15_is_adsp_memoryfunction cs47l15_16bit_readable_registerfunction cs47l15_16bit_volatile_registerfunction cs47l15_32bit_readable_registerfunction cs47l15_32bit_volatile_registerexport cs47l15_patchexport cs47l15_16bit_spi_regmapexport cs47l15_16bit_i2c_regmapexport cs47l15_32bit_spi_regmapexport cs47l15_32bit_i2c_regmap
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0-only
/*
* Regmap tables for CS47L15 codec
*
* Copyright (C) 2016-2019 Cirrus Logic, Inc. and
* Cirrus Logic International Semiconductor Ltd.
*/
#include <linux/device.h>
#include <linux/module.h>
#include <linux/regmap.h>
#include <linux/mfd/madera/core.h>
#include <linux/mfd/madera/registers.h>
#include "madera.h"
static const struct reg_sequence cs47l15_reva_16_patch[] = {
{ 0x8C, 0x5555 },
{ 0x8C, 0xAAAA },
{ 0x314, 0x0080 },
{ 0x4A8, 0x6023 },
{ 0x4A9, 0x6023 },
{ 0x4D4, 0x0008 },
{ 0x4CF, 0x0F00 },
{ 0x4D7, 0x1B2B },
{ 0x8C, 0xCCCC },
{ 0x8C, 0x3333 },
};
int cs47l15_patch(struct madera *madera)
{
int ret;
ret = regmap_register_patch(madera->regmap,
cs47l15_reva_16_patch,
ARRAY_SIZE(cs47l15_reva_16_patch));
if (ret < 0) {
dev_err(madera->dev,
"Error in applying 16-bit patch: %d\n", ret);
return ret;
}
return 0;
}
EXPORT_SYMBOL_GPL(cs47l15_patch);
static const struct reg_default cs47l15_reg_default[] = {
{ 0x00000020, 0x0000 }, /* R32 (0x20) - Tone Generator 1 */
{ 0x00000021, 0x1000 }, /* R33 (0x21) - Tone Generator 2 */
{ 0x00000022, 0x0000 }, /* R34 (0x22) - Tone Generator 3 */
{ 0x00000023, 0x1000 }, /* R35 (0x23) - Tone Generator 4 */
{ 0x00000024, 0x0000 }, /* R36 (0x24) - Tone Generator 5 */
{ 0x00000030, 0x0000 }, /* R48 (0x30) - PWM Drive 1 */
{ 0x00000031, 0x0100 }, /* R49 (0x31) - PWM Drive 2 */
{ 0x00000032, 0x0100 }, /* R50 (0x32) - PWM Drive 3 */
{ 0x00000061, 0x01ff }, /* R97 (0x61) - Sample Rate Sequence Select 1 */
{ 0x00000062, 0x01ff }, /* R98 (0x62) - Sample Rate Sequence Select 2 */
{ 0x00000063, 0x01ff }, /* R99 (0x63) - Sample Rate Sequence Select 3 */
{ 0x00000064, 0x01ff }, /* R100 (0x64) - Sample Rate Sequence Select 4 */
{ 0x00000066, 0x01ff }, /* R102 (0x66) - Always On Triggers Sequence Select 1 */
{ 0x00000067, 0x01ff }, /* R103 (0x67) - Always On Triggers Sequence Select 2 */
{ 0x00000090, 0x0000 }, /* R144 (0x90) - Haptics Control 1 */
{ 0x00000091, 0x7fff }, /* R145 (0x91) - Haptics Control 2 */
{ 0x00000092, 0x0000 }, /* R146 (0x92) - Haptics Phase 1 Intensity */
{ 0x00000093, 0x0000 }, /* R147 (0x93) - Haptics Phase 1 Duration */
{ 0x00000094, 0x0000 }, /* R148 (0x94) - Haptics Phase 2 Intensity */
{ 0x00000095, 0x0000 }, /* R149 (0x95) - Haptics Phase 2 Duration */
{ 0x00000096, 0x0000 }, /* R150 (0x96) - Haptics Phase 3 Intensity */
{ 0x00000097, 0x0000 }, /* R151 (0x97) - Haptics Phase 3 Duration */
{ 0x000000a0, 0x0000 }, /* R160 (0xA0) - Comfort Noise Generator */
{ 0x00000100, 0x0002 }, /* R256 (0x100) - Clock 32K 1 */
{ 0x00000101, 0x0404 }, /* R257 (0x101) - System Clock 1 */
{ 0x00000102, 0x0011 }, /* R258 (0x102) - Sample Rate 1 */
{ 0x00000103, 0x0011 }, /* R259 (0x103) - Sample Rate 2 */
{ 0x00000104, 0x0011 }, /* R260 (0x104) - Sample Rate 3 */
{ 0x00000120, 0x0304 }, /* R288 (0x120) - DSP Clock 1 */
{ 0x00000122, 0x0000 }, /* R290 (0x122) - DSP Clock 2 */
{ 0x00000149, 0x0000 }, /* R329 (0x149) - Output System Clock */
{ 0x00000152, 0x0000 }, /* R338 (0x152) - Rate Estimator 1 */
{ 0x00000153, 0x0000 }, /* R339 (0x153) - Rate Estimator 2 */
{ 0x00000154, 0x0000 }, /* R340 (0x154) - Rate Estimator 3 */
{ 0x00000155, 0x0000 }, /* R341 (0x155) - Rate Estimator 4 */
{ 0x00000156, 0x0000 }, /* R342 (0x156) - Rate Estimator 5 */
{ 0x00000171, 0x0002 }, /* R369 (0x171) - FLL1 Control 1 */
{ 0x00000172, 0x0008 }, /* R370 (0x172) - FLL1 Control 2 */
{ 0x00000173, 0x0018 }, /* R371 (0x173) - FLL1 Control 3 */
{ 0x00000174, 0x007d }, /* R372 (0x174) - FLL1 Control 4 */
{ 0x00000175, 0x0000 }, /* R373 (0x175) - FLL1 Control 5 */
{ 0x00000176, 0x0000 }, /* R374 (0x176) - FLL1 Control 6 */
Annotation
- Immediate include surface: `linux/device.h`, `linux/module.h`, `linux/regmap.h`, `linux/mfd/madera/core.h`, `linux/mfd/madera/registers.h`, `madera.h`.
- Detected declarations: `function cs47l15_patch`, `function cs47l15_is_adsp_memory`, `function cs47l15_16bit_readable_register`, `function cs47l15_16bit_volatile_register`, `function cs47l15_32bit_readable_register`, `function cs47l15_32bit_volatile_register`, `export cs47l15_patch`, `export cs47l15_16bit_spi_regmap`, `export cs47l15_16bit_i2c_regmap`, `export cs47l15_32bit_spi_regmap`.
- Atlas domain: Driver Families / drivers/mfd.
- Implementation status: integration implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.