blob: 157eb4a5b1e3955caf5306df80341160f1f2bef3 [file] [log] [blame]
Stephan Gerholdcb9589f2021-07-08 20:33:48 +02001/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Based on include/linux/mfd/abx500/ab8500.h from Linux
4 * Copyright (C) ST-Ericsson SA 2010
5 * Author: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
6 */
7
8#ifndef _PMIC_AB8500_H_
9#define _PMIC_AB8500_H_
10
11/*
12 * AB IC versions
13 *
14 * AB8500_VERSION_AB8500 should be 0xFF but will never be read as need a
15 * non-supported multi-byte I2C access via PRCMU. Set to 0x00 to ease the
16 * print of version string.
17 */
18enum ab8500_version {
19 AB8500_VERSION_AB8500 = 0x0,
20 AB8500_VERSION_AB8505 = 0x1,
21 AB8500_VERSION_AB9540 = 0x2,
22 AB8500_VERSION_AB8540 = 0x4,
23 AB8500_VERSION_UNDEFINED,
24};
25
26/* AB8500 CIDs*/
27#define AB8500_CUTEARLY 0x00
28#define AB8500_CUT1P0 0x10
29#define AB8500_CUT1P1 0x11
30#define AB8500_CUT1P2 0x12 /* Only valid for AB8540 */
31#define AB8500_CUT2P0 0x20
32#define AB8500_CUT3P0 0x30
33#define AB8500_CUT3P3 0x33
34
35/*
36 * AB8500 bank addresses
37 */
38#define AB8500_BANK(bank, reg) (((bank) << 8) | (reg))
39#define AB8500_M_FSM_RANK(reg) AB8500_BANK(0x0, reg)
40#define AB8500_SYS_CTRL1_BLOCK(reg) AB8500_BANK(0x1, reg)
41#define AB8500_SYS_CTRL2_BLOCK(reg) AB8500_BANK(0x2, reg)
42#define AB8500_REGU_CTRL1(reg) AB8500_BANK(0x3, reg)
43#define AB8500_REGU_CTRL2(reg) AB8500_BANK(0x4, reg)
44#define AB8500_USB(reg) AB8500_BANK(0x5, reg)
45#define AB8500_TVOUT(reg) AB8500_BANK(0x6, reg)
46#define AB8500_DBI(reg) AB8500_BANK(0x7, reg)
47#define AB8500_ECI_AV_ACC(reg) AB8500_BANK(0x8, reg)
48#define AB8500_RESERVED(reg) AB8500_BANK(0x9, reg)
49#define AB8500_GPADC(reg) AB8500_BANK(0xA, reg)
50#define AB8500_CHARGER(reg) AB8500_BANK(0xB, reg)
51#define AB8500_GAS_GAUGE(reg) AB8500_BANK(0xC, reg)
52#define AB8500_AUDIO(reg) AB8500_BANK(0xD, reg)
53#define AB8500_INTERRUPT(reg) AB8500_BANK(0xE, reg)
54#define AB8500_RTC(reg) AB8500_BANK(0xF, reg)
55#define AB8500_GPIO(reg) AB8500_BANK(0x10, reg)
56#define AB8500_MISC(reg) AB8500_BANK(0x10, reg)
57#define AB8500_DEVELOPMENT(reg) AB8500_BANK(0x11, reg)
58#define AB8500_DEBUG(reg) AB8500_BANK(0x12, reg)
59#define AB8500_PROD_TEST(reg) AB8500_BANK(0x13, reg)
60#define AB8500_STE_TEST(reg) AB8500_BANK(0x14, reg)
61#define AB8500_OTP_EMUL(reg) AB8500_BANK(0x15, reg)
62
63#define AB8500_NUM_BANKS 0x16
64#define AB8500_NUM_REGISTERS AB8500_BANK(AB8500_NUM_BANKS, 0)
65
66struct ab8500 {
67 enum ab8500_version version;
68 u8 chip_id;
69};
70
71static inline int is_ab8500(struct ab8500 *ab)
72{
73 return ab->version == AB8500_VERSION_AB8500;
74}
75
76static inline int is_ab8505(struct ab8500 *ab)
77{
78 return ab->version == AB8500_VERSION_AB8505;
79}
80
81/* exclude also ab8505, ab9540... */
82static inline int is_ab8500_1p0_or_earlier(struct ab8500 *ab)
83{
84 return (is_ab8500(ab) && (ab->chip_id <= AB8500_CUT1P0));
85}
86
87/* exclude also ab8505, ab9540... */
88static inline int is_ab8500_1p1_or_earlier(struct ab8500 *ab)
89{
90 return (is_ab8500(ab) && (ab->chip_id <= AB8500_CUT1P1));
91}
92
93/* exclude also ab8505, ab9540... */
94static inline int is_ab8500_2p0_or_earlier(struct ab8500 *ab)
95{
96 return (is_ab8500(ab) && (ab->chip_id <= AB8500_CUT2P0));
97}
98
99static inline int is_ab8500_3p3_or_earlier(struct ab8500 *ab)
100{
101 return (is_ab8500(ab) && (ab->chip_id <= AB8500_CUT3P3));
102}
103
104/* exclude also ab8505, ab9540... */
105static inline int is_ab8500_2p0(struct ab8500 *ab)
106{
107 return (is_ab8500(ab) && (ab->chip_id == AB8500_CUT2P0));
108}
109
110static inline int is_ab8505_1p0_or_earlier(struct ab8500 *ab)
111{
112 return (is_ab8505(ab) && (ab->chip_id <= AB8500_CUT1P0));
113}
114
115static inline int is_ab8505_2p0(struct ab8500 *ab)
116{
117 return (is_ab8505(ab) && (ab->chip_id == AB8500_CUT2P0));
118}
119
120static inline int is_ab8505_2p0_earlier(struct ab8500 *ab)
121{
122 return (is_ab8505(ab) && (ab->chip_id < AB8500_CUT2P0));
123}
124
125#endif