Merge tag 'kgdb-5.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/danielt...
[linux-2.6-microblaze.git] / include / linux / mfd / abx500.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (C) 2007-2009 ST-Ericsson AB
4  *
5  * ABX500 core access functions.
6  * The abx500 interface is used for the Analog Baseband chips.
7  *
8  * Author: Mattias Wallin <mattias.wallin@stericsson.com>
9  * Author: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
10  * Author: Bengt Jonsson <bengt.g.jonsson@stericsson.com>
11  * Author: Rickard Andersson <rickard.andersson@stericsson.com>
12  */
13
14 #include <linux/regulator/machine.h>
15
16 struct device;
17
18 #ifndef MFD_ABX500_H
19 #define MFD_ABX500_H
20
21 /**
22  * struct abx500_init_setting
23  * Initial value of the registers for driver to use during setup.
24  */
25 struct abx500_init_settings {
26         u8 bank;
27         u8 reg;
28         u8 setting;
29 };
30
31 int abx500_set_register_interruptible(struct device *dev, u8 bank, u8 reg,
32         u8 value);
33 int abx500_get_register_interruptible(struct device *dev, u8 bank, u8 reg,
34         u8 *value);
35 int abx500_get_register_page_interruptible(struct device *dev, u8 bank,
36         u8 first_reg, u8 *regvals, u8 numregs);
37 int abx500_set_register_page_interruptible(struct device *dev, u8 bank,
38         u8 first_reg, u8 *regvals, u8 numregs);
39 /**
40  * abx500_mask_and_set_register_inerruptible() - Modifies selected bits of a
41  *      target register
42  *
43  * @dev: The AB sub device.
44  * @bank: The i2c bank number.
45  * @bitmask: The bit mask to use.
46  * @bitvalues: The new bit values.
47  *
48  * Updates the value of an AB register:
49  * value -> ((value & ~bitmask) | (bitvalues & bitmask))
50  */
51 int abx500_mask_and_set_register_interruptible(struct device *dev, u8 bank,
52         u8 reg, u8 bitmask, u8 bitvalues);
53 int abx500_get_chip_id(struct device *dev);
54 int abx500_event_registers_startup_state_get(struct device *dev, u8 *event);
55 int abx500_startup_irq_enabled(struct device *dev, unsigned int irq);
56
57 struct abx500_ops {
58         int (*get_chip_id) (struct device *);
59         int (*get_register) (struct device *, u8, u8, u8 *);
60         int (*set_register) (struct device *, u8, u8, u8);
61         int (*get_register_page) (struct device *, u8, u8, u8 *, u8);
62         int (*set_register_page) (struct device *, u8, u8, u8 *, u8);
63         int (*mask_and_set_register) (struct device *, u8, u8, u8, u8);
64         int (*event_registers_startup_state_get) (struct device *, u8 *);
65         int (*startup_irq_enabled) (struct device *, unsigned int);
66         void (*dump_all_banks) (struct device *);
67 };
68
69 int abx500_register_ops(struct device *core_dev, struct abx500_ops *ops);
70 void abx500_remove_ops(struct device *dev);
71 #endif