]> Git Repo - J-linux.git/blob - drivers/platform/x86/intel/int3472/intel_skl_int3472_common.h
Merge remote-tracking branch 'spi/for-5.14' into spi-linus
[J-linux.git] / drivers / platform / x86 / intel / int3472 / intel_skl_int3472_common.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Author: Dan Scally <[email protected]> */
3
4 #ifndef _INTEL_SKL_INT3472_H
5 #define _INTEL_SKL_INT3472_H
6
7 #include <linux/clk-provider.h>
8 #include <linux/gpio/machine.h>
9 #include <linux/regulator/driver.h>
10 #include <linux/regulator/machine.h>
11 #include <linux/types.h>
12
13 /* FIXME drop this once the I2C_DEV_NAME_FORMAT macro has been added to include/linux/i2c.h */
14 #ifndef I2C_DEV_NAME_FORMAT
15 #define I2C_DEV_NAME_FORMAT                                     "i2c-%s"
16 #endif
17
18 /* PMIC GPIO Types */
19 #define INT3472_GPIO_TYPE_RESET                                 0x00
20 #define INT3472_GPIO_TYPE_POWERDOWN                             0x01
21 #define INT3472_GPIO_TYPE_POWER_ENABLE                          0x0b
22 #define INT3472_GPIO_TYPE_CLK_ENABLE                            0x0c
23 #define INT3472_GPIO_TYPE_PRIVACY_LED                           0x0d
24
25 #define INT3472_PDEV_MAX_NAME_LEN                               23
26 #define INT3472_MAX_SENSOR_GPIOS                                3
27
28 #define GPIO_REGULATOR_NAME_LENGTH                              21
29 #define GPIO_REGULATOR_SUPPLY_NAME_LENGTH                       9
30
31 #define CIO2_SENSOR_SSDB_MCLKSPEED_OFFSET                       86
32
33 #define INT3472_REGULATOR(_name, _supply, _ops)                 \
34         (const struct regulator_desc) {                         \
35                 .name = _name,                                  \
36                 .supply_name = _supply,                         \
37                 .type = REGULATOR_VOLTAGE,                      \
38                 .ops = _ops,                                    \
39                 .owner = THIS_MODULE,                           \
40         }
41
42 #define to_int3472_clk(hw)                                      \
43         container_of(hw, struct int3472_gpio_clock, clk_hw)
44
45 #define to_int3472_device(clk)                                  \
46         container_of(clk, struct int3472_discrete_device, clock)
47
48 struct acpi_device;
49 struct i2c_client;
50 struct platform_device;
51
52 struct int3472_cldb {
53         u8 version;
54         /*
55          * control logic type
56          * 0: UNKNOWN
57          * 1: DISCRETE(CRD-D)
58          * 2: PMIC TPS68470
59          * 3: PMIC uP6641
60          */
61         u8 control_logic_type;
62         u8 control_logic_id;
63         u8 sensor_card_sku;
64         u8 reserved[28];
65 };
66
67 struct int3472_gpio_function_remap {
68         const char *documented;
69         const char *actual;
70 };
71
72 struct int3472_sensor_config {
73         const char *sensor_module_name;
74         struct regulator_consumer_supply supply_map;
75         const struct int3472_gpio_function_remap *function_maps;
76 };
77
78 struct int3472_discrete_device {
79         struct acpi_device *adev;
80         struct device *dev;
81         struct acpi_device *sensor;
82         const char *sensor_name;
83
84         const struct int3472_sensor_config *sensor_config;
85
86         struct int3472_gpio_regulator {
87                 char regulator_name[GPIO_REGULATOR_NAME_LENGTH];
88                 char supply_name[GPIO_REGULATOR_SUPPLY_NAME_LENGTH];
89                 struct gpio_desc *gpio;
90                 struct regulator_dev *rdev;
91                 struct regulator_desc rdesc;
92         } regulator;
93
94         struct int3472_gpio_clock {
95                 struct clk *clk;
96                 struct clk_hw clk_hw;
97                 struct clk_lookup *cl;
98                 struct gpio_desc *ena_gpio;
99                 struct gpio_desc *led_gpio;
100                 u32 frequency;
101         } clock;
102
103         unsigned int ngpios; /* how many GPIOs have we seen */
104         unsigned int n_sensor_gpios; /* how many have we mapped to sensor */
105         struct gpiod_lookup_table gpios;
106 };
107
108 int skl_int3472_discrete_probe(struct platform_device *pdev);
109 int skl_int3472_discrete_remove(struct platform_device *pdev);
110 int skl_int3472_tps68470_probe(struct i2c_client *client);
111 union acpi_object *skl_int3472_get_acpi_buffer(struct acpi_device *adev,
112                                                char *id);
113 int skl_int3472_fill_cldb(struct acpi_device *adev, struct int3472_cldb *cldb);
114
115 int skl_int3472_register_clock(struct int3472_discrete_device *int3472);
116 void skl_int3472_unregister_clock(struct int3472_discrete_device *int3472);
117
118 int skl_int3472_register_regulator(struct int3472_discrete_device *int3472,
119                                    struct acpi_resource_gpio *agpio);
120 void skl_int3472_unregister_regulator(struct int3472_discrete_device *int3472);
121
122 #endif
This page took 0.039157 seconds and 4 git commands to generate.