162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*****************************************************************************
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright (C) 2008 Cedric Bregardis <cedric.bregardis@free.fr> and
562306a36Sopenharmony_ci * Jean-Christian Hassler <jhassler@free.fr>
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * This file is part of the Audiowerk2 ALSA driver
862306a36Sopenharmony_ci *
962306a36Sopenharmony_ci *****************************************************************************/
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci/* SAA7146 registers */
1262306a36Sopenharmony_ci#define PCI_BT_A	0x4C
1362306a36Sopenharmony_ci#define IICTFR		0x8C
1462306a36Sopenharmony_ci#define IICSTA		0x90
1562306a36Sopenharmony_ci#define BaseA1_in	0x94
1662306a36Sopenharmony_ci#define ProtA1_in	0x98
1762306a36Sopenharmony_ci#define PageA1_in	0x9C
1862306a36Sopenharmony_ci#define BaseA1_out	0xA0
1962306a36Sopenharmony_ci#define ProtA1_out	0xA4
2062306a36Sopenharmony_ci#define PageA1_out	0xA8
2162306a36Sopenharmony_ci#define BaseA2_in	0xAC
2262306a36Sopenharmony_ci#define ProtA2_in	0xB0
2362306a36Sopenharmony_ci#define PageA2_in	0xB4
2462306a36Sopenharmony_ci#define BaseA2_out	0xB8
2562306a36Sopenharmony_ci#define ProtA2_out	0xBC
2662306a36Sopenharmony_ci#define PageA2_out	0xC0
2762306a36Sopenharmony_ci#define IER		0xDC
2862306a36Sopenharmony_ci#define GPIO_CTRL	0xE0
2962306a36Sopenharmony_ci#define ACON1		0xF4
3062306a36Sopenharmony_ci#define ACON2		0xF8
3162306a36Sopenharmony_ci#define MC1		0xFC
3262306a36Sopenharmony_ci#define MC2		0x100
3362306a36Sopenharmony_ci#define ISR		0x10C
3462306a36Sopenharmony_ci#define PSR		0x110
3562306a36Sopenharmony_ci#define SSR		0x114
3662306a36Sopenharmony_ci#define PCI_ADP1	0x12C
3762306a36Sopenharmony_ci#define PCI_ADP2	0x130
3862306a36Sopenharmony_ci#define PCI_ADP3	0x134
3962306a36Sopenharmony_ci#define PCI_ADP4	0x138
4062306a36Sopenharmony_ci#define LEVEL_REP	0x140
4162306a36Sopenharmony_ci#define FB_BUFFER1	0x144
4262306a36Sopenharmony_ci#define FB_BUFFER2	0x148
4362306a36Sopenharmony_ci#define TSL1		0x180
4462306a36Sopenharmony_ci#define TSL2		0x1C0
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci#define ME	(1UL << 11)
4762306a36Sopenharmony_ci#define LIMIT	(1UL << 4)
4862306a36Sopenharmony_ci#define PV	(1UL << 3)
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci/* PSR/ISR/IER */
5162306a36Sopenharmony_ci#define PPEF		(1UL << 31)
5262306a36Sopenharmony_ci#define PABO		(1UL << 30)
5362306a36Sopenharmony_ci#define IIC_S		(1UL << 17)
5462306a36Sopenharmony_ci#define IIC_E		(1UL << 16)
5562306a36Sopenharmony_ci#define A2_in		(1UL << 15)
5662306a36Sopenharmony_ci#define A2_out		(1UL << 14)
5762306a36Sopenharmony_ci#define A1_in		(1UL << 13)
5862306a36Sopenharmony_ci#define A1_out		(1UL << 12)
5962306a36Sopenharmony_ci#define AFOU		(1UL << 11)
6062306a36Sopenharmony_ci#define PIN3		(1UL << 6)
6162306a36Sopenharmony_ci#define PIN2		(1UL << 5)
6262306a36Sopenharmony_ci#define PIN1		(1UL << 4)
6362306a36Sopenharmony_ci#define PIN0		(1UL << 3)
6462306a36Sopenharmony_ci#define ECS		(1UL << 2)
6562306a36Sopenharmony_ci#define EC3S		(1UL << 1)
6662306a36Sopenharmony_ci#define EC0S		(1UL << 0)
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci/* SSR */
6962306a36Sopenharmony_ci#define PRQ		(1UL << 31)
7062306a36Sopenharmony_ci#define PMA		(1UL << 30)
7162306a36Sopenharmony_ci#define IIC_EA		(1UL << 21)
7262306a36Sopenharmony_ci#define IIC_EW		(1UL << 20)
7362306a36Sopenharmony_ci#define IIC_ER		(1UL << 19)
7462306a36Sopenharmony_ci#define IIC_EL		(1UL << 18)
7562306a36Sopenharmony_ci#define IIC_EF		(1UL << 17)
7662306a36Sopenharmony_ci#define AF2_in		(1UL << 10)
7762306a36Sopenharmony_ci#define AF2_out		(1UL << 9)
7862306a36Sopenharmony_ci#define AF1_in		(1UL << 8)
7962306a36Sopenharmony_ci#define AF1_out		(1UL << 7)
8062306a36Sopenharmony_ci#define EC5S		(1UL << 3)
8162306a36Sopenharmony_ci#define EC4S		(1UL << 2)
8262306a36Sopenharmony_ci#define EC2S		(1UL << 1)
8362306a36Sopenharmony_ci#define EC1S		(1UL << 0)
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci/* PCI_BT_A */
8662306a36Sopenharmony_ci#define BurstA1_in	(1UL << 26)
8762306a36Sopenharmony_ci#define ThreshA1_in	(1UL << 24)
8862306a36Sopenharmony_ci#define BurstA1_out	(1UL << 18)
8962306a36Sopenharmony_ci#define ThreshA1_out	(1UL << 16)
9062306a36Sopenharmony_ci#define BurstA2_in	(1UL << 10)
9162306a36Sopenharmony_ci#define ThreshA2_in	(1UL << 8)
9262306a36Sopenharmony_ci#define BurstA2_out	(1UL << 2)
9362306a36Sopenharmony_ci#define ThreshA2_out	(1UL << 0)
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci/* MC1 */
9662306a36Sopenharmony_ci#define MRST_N		(1UL << 15)
9762306a36Sopenharmony_ci#define EAP		(1UL << 9)
9862306a36Sopenharmony_ci#define EI2C		(1UL << 8)
9962306a36Sopenharmony_ci#define TR_E_A2_OUT	(1UL << 3)
10062306a36Sopenharmony_ci#define TR_E_A2_IN	(1UL << 2)
10162306a36Sopenharmony_ci#define TR_E_A1_OUT	(1UL << 1)
10262306a36Sopenharmony_ci#define TR_E_A1_IN	(1UL << 0)
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci/* MC2 */
10562306a36Sopenharmony_ci#define UPLD_IIC	(1UL << 0)
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci/* ACON1 */
10862306a36Sopenharmony_ci#define AUDIO_MODE	(1UL << 29)
10962306a36Sopenharmony_ci#define MAXLEVEL	(1UL << 22)
11062306a36Sopenharmony_ci#define A1_SWAP		(1UL << 21)
11162306a36Sopenharmony_ci#define A2_SWAP		(1UL << 20)
11262306a36Sopenharmony_ci#define WS0_CTRL	(1UL << 18)
11362306a36Sopenharmony_ci#define WS0_SYNC	(1UL << 16)
11462306a36Sopenharmony_ci#define WS1_CTRL	(1UL << 14)
11562306a36Sopenharmony_ci#define WS1_SYNC	(1UL << 12)
11662306a36Sopenharmony_ci#define WS2_CTRL	(1UL << 10)
11762306a36Sopenharmony_ci#define WS2_SYNC	(1UL << 8)
11862306a36Sopenharmony_ci#define WS3_CTRL	(1UL << 6)
11962306a36Sopenharmony_ci#define WS3_SYNC	(1UL << 4)
12062306a36Sopenharmony_ci#define WS4_CTRL	(1UL << 2)
12162306a36Sopenharmony_ci#define WS4_SYNC	(1UL << 0)
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci/* ACON2 */
12462306a36Sopenharmony_ci#define A1_CLKSRC	(1UL << 27)
12562306a36Sopenharmony_ci#define A2_CLKSRC	(1UL << 22)
12662306a36Sopenharmony_ci#define INVERT_BCLK1	(1UL << 21)
12762306a36Sopenharmony_ci#define INVERT_BCLK2	(1UL << 20)
12862306a36Sopenharmony_ci#define BCLK1_OEN	(1UL << 19)
12962306a36Sopenharmony_ci#define BCLK2_OEN	(1UL << 18)
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci/* IICSTA */
13262306a36Sopenharmony_ci#define IICCC		(1UL << 8)
13362306a36Sopenharmony_ci#define ABORT		(1UL << 7)
13462306a36Sopenharmony_ci#define SPERR		(1UL << 6)
13562306a36Sopenharmony_ci#define APERR		(1UL << 5)
13662306a36Sopenharmony_ci#define DTERR		(1UL << 4)
13762306a36Sopenharmony_ci#define DRERR		(1UL << 3)
13862306a36Sopenharmony_ci#define AL		(1UL << 2)
13962306a36Sopenharmony_ci#define ERR		(1UL << 1)
14062306a36Sopenharmony_ci#define BUSY		(1UL << 0)
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci/* IICTFR */
14362306a36Sopenharmony_ci#define BYTE2		(1UL << 24)
14462306a36Sopenharmony_ci#define BYTE1		(1UL << 16)
14562306a36Sopenharmony_ci#define BYTE0		(1UL << 8)
14662306a36Sopenharmony_ci#define ATRR2		(1UL << 6)
14762306a36Sopenharmony_ci#define ATRR1		(1UL << 4)
14862306a36Sopenharmony_ci#define ATRR0		(1UL << 2)
14962306a36Sopenharmony_ci#define ERR		(1UL << 1)
15062306a36Sopenharmony_ci#define BUSY		(1UL << 0)
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ci#define START	3
15362306a36Sopenharmony_ci#define CONT	2
15462306a36Sopenharmony_ci#define STOP	1
15562306a36Sopenharmony_ci#define NOP	0
156