drivers/mfd/cs47l35-tables.c

Source file repositories/reference/linux-study-clean/drivers/mfd/cs47l35-tables.c

File Facts

System
Linux kernel
Corpus path
drivers/mfd/cs47l35-tables.c
Extension
.c
Size
75582 bytes
Lines
1556
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.

Dependency Surface

Detected Declarations

Annotated Snippet

// SPDX-License-Identifier: GPL-2.0-only
/*
 * Regmap tables for CS47L35 codec
 *
 * Copyright (C) 2015-2017 Cirrus Logic
 */

#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 cs47l35_reva_16_patch[] = {
	{ 0x460, 0x0c40 },
	{ 0x461, 0xcd1a },
	{ 0x462, 0x0c40 },
	{ 0x463, 0xb53b },
	{ 0x464, 0x0c40 },
	{ 0x465, 0x7503 },
	{ 0x466, 0x0c40 },
	{ 0x467, 0x4a41 },
	{ 0x468, 0x0041 },
	{ 0x469, 0x3491 },
	{ 0x46a, 0x0841 },
	{ 0x46b, 0x1f50 },
	{ 0x46c, 0x0446 },
	{ 0x46d, 0x14ed },
	{ 0x46e, 0x0446 },
	{ 0x46f, 0x1455 },
	{ 0x470, 0x04c6 },
	{ 0x471, 0x1220 },
	{ 0x472, 0x04c6 },
	{ 0x473, 0x040f },
	{ 0x474, 0x04ce },
	{ 0x475, 0x0339 },
	{ 0x476, 0x05df },
	{ 0x477, 0x028f },
	{ 0x478, 0x05df },
	{ 0x479, 0x0209 },
	{ 0x47a, 0x05df },
	{ 0x47b, 0x00cf },
	{ 0x47c, 0x05df },
	{ 0x47d, 0x0001 },
	{ 0x47e, 0x07ff },
};

int cs47l35_patch(struct madera *madera)
{
	int ret;

	ret = regmap_register_patch(madera->regmap, cs47l35_reva_16_patch,
				    ARRAY_SIZE(cs47l35_reva_16_patch));
	if (ret < 0)
		dev_err(madera->dev, "Error applying patch: %d\n", ret);

	return ret;
}
EXPORT_SYMBOL_GPL(cs47l35_patch);

static const struct reg_default cs47l35_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 */

Annotation

Implementation Notes