Commit | Line | Data |
---|---|---|
94be70d4 LW |
1 | /* |
2 | * Copyright (C) 2011 ST-Ericsson | |
3 | * License terms: GNU General Public License (GPL) version 2 | |
4 | * Shared definitions and data structures for the AB5500 MFD driver | |
5 | */ | |
6 | ||
7 | /* Read/write operation values. */ | |
8 | #define AB5500_PERM_RD (0x01) | |
9 | #define AB5500_PERM_WR (0x02) | |
10 | ||
11 | /* Read/write permissions. */ | |
12 | #define AB5500_PERM_RO (AB5500_PERM_RD) | |
13 | #define AB5500_PERM_RW (AB5500_PERM_RD | AB5500_PERM_WR) | |
14 | ||
15 | #define AB5500_MASK_BASE (0x60) | |
16 | #define AB5500_MASK_END (0x79) | |
17 | #define AB5500_CHIP_ID (0x20) | |
18 | ||
19 | /** | |
20 | * struct ab5500_reg_range | |
21 | * @first: the first address of the range | |
22 | * @last: the last address of the range | |
23 | * @perm: access permissions for the range | |
24 | */ | |
25 | struct ab5500_reg_range { | |
26 | u8 first; | |
27 | u8 last; | |
28 | u8 perm; | |
29 | }; | |
30 | ||
31 | /** | |
32 | * struct ab5500_i2c_ranges | |
33 | * @count: the number of ranges in the list | |
34 | * @range: the list of register ranges | |
35 | */ | |
36 | struct ab5500_i2c_ranges { | |
37 | u8 nranges; | |
38 | u8 bankid; | |
39 | const struct ab5500_reg_range *range; | |
40 | }; | |
41 | ||
42 | /** | |
43 | * struct ab5500_i2c_banks | |
44 | * @count: the number of ranges in the list | |
45 | * @range: the list of register ranges | |
46 | */ | |
47 | struct ab5500_i2c_banks { | |
48 | u8 nbanks; | |
49 | const struct ab5500_i2c_ranges *bank; | |
50 | }; | |
51 | ||
52 | /** | |
53 | * struct ab5500_bank | |
54 | * @slave_addr: I2C slave_addr found in AB5500 specification | |
55 | * @name: Documentation name of the bank. For reference | |
56 | */ | |
57 | struct ab5500_bank { | |
58 | u8 slave_addr; | |
59 | const char *name; | |
60 | }; | |
61 | ||
62 | static const struct ab5500_bank bankinfo[AB5500_NUM_BANKS] = { | |
63 | [AB5500_BANK_VIT_IO_I2C_CLK_TST_OTP] = { | |
64 | AB5500_ADDR_VIT_IO_I2C_CLK_TST_OTP, "VIT_IO_I2C_CLK_TST_OTP"}, | |
65 | [AB5500_BANK_VDDDIG_IO_I2C_CLK_TST] = { | |
66 | AB5500_ADDR_VDDDIG_IO_I2C_CLK_TST, "VDDDIG_IO_I2C_CLK_TST"}, | |
67 | [AB5500_BANK_VDENC] = {AB5500_ADDR_VDENC, "VDENC"}, | |
68 | [AB5500_BANK_SIM_USBSIM] = {AB5500_ADDR_SIM_USBSIM, "SIM_USBSIM"}, | |
69 | [AB5500_BANK_LED] = {AB5500_ADDR_LED, "LED"}, | |
70 | [AB5500_BANK_ADC] = {AB5500_ADDR_ADC, "ADC"}, | |
71 | [AB5500_BANK_RTC] = {AB5500_ADDR_RTC, "RTC"}, | |
72 | [AB5500_BANK_STARTUP] = {AB5500_ADDR_STARTUP, "STARTUP"}, | |
73 | [AB5500_BANK_DBI_ECI] = {AB5500_ADDR_DBI_ECI, "DBI-ECI"}, | |
74 | [AB5500_BANK_CHG] = {AB5500_ADDR_CHG, "CHG"}, | |
75 | [AB5500_BANK_FG_BATTCOM_ACC] = { | |
76 | AB5500_ADDR_FG_BATTCOM_ACC, "FG_BATCOM_ACC"}, | |
77 | [AB5500_BANK_USB] = {AB5500_ADDR_USB, "USB"}, | |
78 | [AB5500_BANK_IT] = {AB5500_ADDR_IT, "IT"}, | |
79 | [AB5500_BANK_VIBRA] = {AB5500_ADDR_VIBRA, "VIBRA"}, | |
80 | [AB5500_BANK_AUDIO_HEADSETUSB] = { | |
81 | AB5500_ADDR_AUDIO_HEADSETUSB, "AUDIO_HEADSETUSB"}, | |
82 | }; | |
83 | ||
84 | int ab5500_get_register_interruptible_raw(struct ab5500 *ab, u8 bank, u8 reg, | |
85 | u8 *value); | |
86 | int ab5500_mask_and_set_register_interruptible_raw(struct ab5500 *ab, u8 bank, | |
87 | u8 reg, u8 bitmask, u8 bitvalues); |