summaryrefslogtreecommitdiff
path: root/sound/soc/codecs/cirrus_legacy.h
blob: 87c6fd79290d4af5f4f101101ec5cf01603cf6ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Some small helpers for older Cirrus Logic parts.
 *
 * Copyright (C) 2021 Cirrus Logic, Inc. and
 *                    Cirrus Logic International Semiconductor Ltd.
 */

static inline int cirrus_read_device_id(struct regmap *regmap, unsigned int reg)
{
	u8 devid[3];
	int ret;

	ret = regmap_bulk_read(regmap, reg, devid, ARRAY_SIZE(devid));
	if (ret < 0)
		return ret;

	return ((devid[0] & 0xFF) << 12) |
	       ((devid[1] & 0xFF) <<  4) |
	       ((devid[2] & 0xF0) >>  4);
}