Linux Audio

Check our new training course

Loading...
 1/* SPDX-License-Identifier: GPL-2.0-only */
 2/*
 3 * PRU-ICSS Subsystem user interfaces
 4 *
 5 * Copyright (C) 2015-2023 Texas Instruments Incorporated - http://www.ti.com
 6 *	MD Danish Anwar <danishanwar@ti.com>
 7 */
 8
 9#ifndef _SOC_TI_PRUSS_H_
10#define _SOC_TI_PRUSS_H_
11
12#include <linux/bits.h>
13#include <linux/regmap.h>
14
15/*
16 * PRU_ICSS_CFG registers
17 * SYSCFG, ISRP, ISP, IESP, IECP, SCRP applicable on AMxxxx devices only
18 */
19#define PRUSS_CFG_REVID         0x00
20#define PRUSS_CFG_SYSCFG        0x04
21#define PRUSS_CFG_GPCFG(x)      (0x08 + (x) * 4)
22#define PRUSS_CFG_CGR           0x10
23#define PRUSS_CFG_ISRP          0x14
24#define PRUSS_CFG_ISP           0x18
25#define PRUSS_CFG_IESP          0x1C
26#define PRUSS_CFG_IECP          0x20
27#define PRUSS_CFG_SCRP          0x24
28#define PRUSS_CFG_PMAO          0x28
29#define PRUSS_CFG_MII_RT        0x2C
30#define PRUSS_CFG_IEPCLK        0x30
31#define PRUSS_CFG_SPP           0x34
32#define PRUSS_CFG_PIN_MX        0x40
33
34/* PRUSS_GPCFG register bits */
35#define PRUSS_GPCFG_PRU_GPI_MODE_MASK           GENMASK(1, 0)
36#define PRUSS_GPCFG_PRU_GPI_MODE_SHIFT          0
37
38#define PRUSS_GPCFG_PRU_MUX_SEL_SHIFT           26
39#define PRUSS_GPCFG_PRU_MUX_SEL_MASK            GENMASK(29, 26)
40
41/* PRUSS_MII_RT register bits */
42#define PRUSS_MII_RT_EVENT_EN                   BIT(0)
43
44/* PRUSS_SPP register bits */
45#define PRUSS_SPP_XFER_SHIFT_EN                 BIT(1)
46#define PRUSS_SPP_PRU1_PAD_HP_EN                BIT(0)
47#define PRUSS_SPP_RTU_XFR_SHIFT_EN              BIT(3)
48
49/**
50 * pruss_cfg_read() - read a PRUSS CFG sub-module register
51 * @pruss: the pruss instance handle
52 * @reg: register offset within the CFG sub-module
53 * @val: pointer to return the value in
54 *
55 * Reads a given register within the PRUSS CFG sub-module and
56 * returns it through the passed-in @val pointer
57 *
58 * Return: 0 on success, or an error code otherwise
59 */
60static int pruss_cfg_read(struct pruss *pruss, unsigned int reg, unsigned int *val)
61{
62	if (IS_ERR_OR_NULL(pruss))
63		return -EINVAL;
64
65	return regmap_read(pruss->cfg_regmap, reg, val);
66}
67
68/**
69 * pruss_cfg_update() - configure a PRUSS CFG sub-module register
70 * @pruss: the pruss instance handle
71 * @reg: register offset within the CFG sub-module
72 * @mask: bit mask to use for programming the @val
73 * @val: value to write
74 *
75 * Programs a given register within the PRUSS CFG sub-module
76 *
77 * Return: 0 on success, or an error code otherwise
78 */
79static int pruss_cfg_update(struct pruss *pruss, unsigned int reg,
80			    unsigned int mask, unsigned int val)
81{
82	if (IS_ERR_OR_NULL(pruss))
83		return -EINVAL;
84
85	return regmap_update_bits(pruss->cfg_regmap, reg, mask, val);
86}
87
88#endif  /* _SOC_TI_PRUSS_H_ */
1