cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

common.h (3361B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/* Author: Dan Scally <djrscally@gmail.com> */
      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
     48struct acpi_device;
     49struct i2c_client;
     50struct platform_device;
     51
     52struct 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
     67struct int3472_gpio_function_remap {
     68	const char *documented;
     69	const char *actual;
     70};
     71
     72struct 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
     78struct 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
    108union acpi_object *skl_int3472_get_acpi_buffer(struct acpi_device *adev,
    109					       char *id);
    110int skl_int3472_fill_cldb(struct acpi_device *adev, struct int3472_cldb *cldb);
    111int skl_int3472_get_sensor_adev_and_name(struct device *dev,
    112					 struct acpi_device **sensor_adev_ret,
    113					 const char **name_ret);
    114
    115int skl_int3472_register_clock(struct int3472_discrete_device *int3472);
    116void skl_int3472_unregister_clock(struct int3472_discrete_device *int3472);
    117
    118int skl_int3472_register_regulator(struct int3472_discrete_device *int3472,
    119				   struct acpi_resource_gpio *agpio);
    120void skl_int3472_unregister_regulator(struct int3472_discrete_device *int3472);
    121
    122#endif