- Add support for Ricoh RC5T619 PMIC to rn5t618 - Add support for PM8821 PMIC to qcom-pm8xxx - New Functionality - Add support for GPIO to lpc_ich - Add support for GPADC to sun4i - Add ability for rk808 to shutdown - Fix-ups - Simplify/strip unnecessary code; tps65218, palmas, tps65217 - Device Tree binding updates; tps65218, altera-a10sr - Provide/export device ID info; tps65218, axp20x-i2c, hi655x-pmic, fsl-imx25-tsadc, intel_soc_pmic_bxtwc - Use MFD API instead of of_platform_populate(); tps65218 - Generalise name-space; pm8xxx - Supply/edit regmap configuration; axp20x, cs47l24-tables, axp20x - Enable compile testing; max77620, max77686, exynos-lpass, abx500-core - Coding style issues; wm8994-core, wm5102-tables - Supply endian support; syscon - Remove module support; ab3100-core, ab8500-debugfs, ab8500-gpadc, abx500-core - Bug Fixes - Fix ordering issues; wm8994 - Fix dependencies (build-time/run-time); exynos_lpass, sun4i-gpadc - Fix compiler warnings; sun4i-gpadc - Fix leaks; mfd-core - Fix page fault during module unload; tps65217 -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEdrbJNaO+IJqU8IdIUa+KL4f8d2EFAlhXxxcACgkQUa+KL4f8 d2HDnxAAhYdrm6+4jYUDzXpKuKPDO4GNakvXY2aTk8dHobca8ySLcDZZ1s0KLLWa iOgOGmVQjL04vraiHiqGYW8kPONeslgFqhhqHmVvMZtLka3ZRXb9BWE6mLa7JBDg LONQFfpiDlbBChiuDSqBKYj0p0Wp65uFF/jtJxGTXe+vUTO94Lbrgo6tCmuAgBf/ k2JS4+/Ufa3QuXuvPm8cVleWhhyEqkWGLJqv5PaDxjNQwP78PzXMYvfOEcCyUpNR hUoG2xJl+aPilVr0I9rsWIqgmDgRHlX67oMneoZkMiVQj20+Yi8YojDgGOpcaOZX Oh/YpdAEqaZh98EX5dKnuM8NQERltl/fTDpe3JNTPl42QYLMDzyBBb810xNzrB7W irJLzmfjEsPH7oYA63/EU3an6yXGXcB1lZ8wTPqFXOpGqw2/3SDSlTjonTxW1nnX yUXVV3VUS0xlHg0GHDuCbUvkJQSi2W6x/A/mzL8QBaKO7iUzv0P/oTZIZZe4Y06f LUCx4vb6W9i+9Me/z1aieXgXqC842U66OTmz1AmNRcntFspAeR3Rg3wGLP6+L/A+ 51Lumjn1IsHwgyd+/uQ3vsb35W/ZNYxTuc61HbWRPSX984sIdtI2+DL4+c8WBPLw MQgTy6ULb5bCt2HQ6DbwMZRpM6hIY2ed/QnJN2q2c3VBA1YgzzQ= =Lkoz -----END PGP SIGNATURE----- Merge tag 'mfd-for-linus-4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd Pull MFD updates from Lee Jones: "New Device Support - Add support for Ricoh RC5T619 PMIC to rn5t618 - Add support for PM8821 PMIC to qcom-pm8xxx New Functionality: - Add support for GPIO to lpc_ich - Add support for GPADC to sun4i - Add ability for rk808 to shutdown Fix-ups: - Simplify/strip unnecessary code; tps65218, palmas, tps65217 - Device Tree binding updates; tps65218, altera-a10sr - Provide/export device ID info; tps65218, axp20x-i2c, hi655x-pmic, fsl-imx25-tsadc, intel_soc_pmic_bxtwc - Use MFD API instead of of_platform_populate(); tps65218 - Generalise name-space; pm8xxx - Supply/edit regmap configuration; axp20x, cs47l24-tables, axp20x - Enable compile testing; max77620, max77686, exynos-lpass, abx500-core - Coding style issues; wm8994-core, wm5102-tables - Supply endian support; syscon - Remove module support; ab3100-core, ab8500-debugfs, ab8500-gpadc, abx500-core Bug Fixes: - Fix ordering issues; wm8994 - Fix dependencies (build-time/run-time); exynos_lpass, sun4i-gpadc - Fix compiler warnings; sun4i-gpadc - Fix leaks; mfd-core - Fix page fault during module unload; tps65217" * tag 'mfd-for-linus-4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd: (49 commits) mfd: tps65217: Support an interrupt pin as the system wakeup mfd: tps65217: Make an interrupt handler simpler mfd: tps65217: Update register interrupt mask bits instead of writing operation mfd: tps65217: Specify the IRQ name mfd: tps65217: Fix page fault on unloading modules mfd: palmas: Remove redundant check in palmas_power_off mfd: arizona: Disable IRQs during driver remove mfd: pm8xxx: add support to pm8821 mfd: intel-lpss: Try to enable Memory-Write-Invalidate mfd: rn5t618: Add Ricoh RC5T619 PMIC support mfd: axp20x: Add address extension registers for AXP806 regmap mfd: intel_soc_pmic_bxtwc: Fix a typo in MODULE_DEVICE_TABLE() mfd: core: Fix device reference leak in mfd_clone_cell mfd: bcm590xx: Simplify a test mfd: sun4i-gpadc: Select regmap-irq mfd: abx500-core: drop unused MODULE_ tags from non-modular code mfd: ab8500: make sysctrl explicitly non-modular mfd: ab8500-gpadc: Make it explicitly non-modular mfd: ab8500-debugfs: Make it explicitly non-modular mfd: ab8500-core: Make it explicitly non-modular ...tirimbino
commit
ac5a28b0d3
@ -0,0 +1,46 @@ |
||||
* Altera Arria10 Development Kit System Resource Chip |
||||
|
||||
Required parent device properties: |
||||
- compatible : "altr,a10sr" |
||||
- spi-max-frequency : Maximum SPI frequency. |
||||
- reg : The SPI Chip Select address for the Arria10 |
||||
System Resource chip |
||||
- interrupt-parent : The parent interrupt controller. |
||||
- interrupts : The interrupt line the device is connected to. |
||||
- interrupt-controller : Marks the device node as an interrupt controller. |
||||
- #interrupt-cells : The number of cells to describe an IRQ, should be 2. |
||||
The first cell is the IRQ number. |
||||
The second cell is the flags, encoded as trigger |
||||
masks from ../interrupt-controller/interrupts.txt. |
||||
|
||||
The A10SR consists of these sub-devices: |
||||
|
||||
Device Description |
||||
------ ---------- |
||||
a10sr_gpio GPIO Controller |
||||
|
||||
Arria10 GPIO |
||||
Required Properties: |
||||
- compatible : Should be "altr,a10sr-gpio" |
||||
- gpio-controller : Marks the device node as a GPIO Controller. |
||||
- #gpio-cells : Should be two. The first cell is the pin number and |
||||
the second cell is used to specify flags. |
||||
See ../gpio/gpio.txt for more information. |
||||
|
||||
Example: |
||||
|
||||
resource-manager@0 { |
||||
compatible = "altr,a10sr"; |
||||
reg = <0>; |
||||
spi-max-frequency = <100000>; |
||||
interrupt-parent = <&portb>; |
||||
interrupts = <5 IRQ_TYPE_LEVEL_LOW>; |
||||
interrupt-controller; |
||||
#interrupt-cells = <2>; |
||||
|
||||
a10sr_gpio: gpio-controller { |
||||
compatible = "altr,a10sr-gpio"; |
||||
gpio-controller; |
||||
#gpio-cells = <2>; |
||||
}; |
||||
}; |
@ -1,23 +1,78 @@ |
||||
TPS65218 family of regulators |
||||
|
||||
Required properties: |
||||
For tps65218 regulators/LDOs |
||||
- compatible: |
||||
- "ti,tps65218-dcdc1" for DCDC1 |
||||
- "ti,tps65218-dcdc2" for DCDC2 |
||||
- "ti,tps65218-dcdc3" for DCDC3 |
||||
- "ti,tps65218-dcdc4" for DCDC4 |
||||
- "ti,tps65218-dcdc5" for DCDC5 |
||||
- "ti,tps65218-dcdc6" for DCDC6 |
||||
- "ti,tps65218-ldo1" for LDO1 |
||||
|
||||
Optional properties: |
||||
- Any optional property defined in bindings/regulator/regulator.txt |
||||
- compatible: "ti,tps65218" |
||||
- reg: I2C slave address |
||||
|
||||
- List of regulators provided by this controller, must be named |
||||
after their hardware counterparts: dcdc[1-6] and ldo1 |
||||
- This is the list of child nodes that specify the regulator |
||||
initialization data for defined regulators. Not all regulators for the given |
||||
device need to be present. The definition for each of these nodes is defined |
||||
using the standard binding for regulators found at ./regulator.txt. |
||||
|
||||
The valid names for regulators are: |
||||
tps65217: regulator-dcdc1, regulator-dcdc2, regulator-dcdc3, regulator-dcdc4, |
||||
regulator-dcdc5, regulator-dcdc6, regulator-ldo1, regulator-ls3. |
||||
Each regulator is defined using the standard binding for regulators. |
||||
|
||||
Example: |
||||
tps65218: tps65218@24 { |
||||
reg = <0x24>; |
||||
compatible = "ti,tps65218"; |
||||
interrupts = <GIC_SPI 7 IRQ_TYPE_NONE>; /* NMIn */ |
||||
interrupt-controller; |
||||
#interrupt-cells = <2>; |
||||
|
||||
dcdc1: regulator-dcdc1 { |
||||
regulator-name = "vdd_core"; |
||||
regulator-min-microvolt = <912000>; |
||||
regulator-max-microvolt = <1144000>; |
||||
regulator-boot-on; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
dcdc2: regulator-dcdc2 { |
||||
regulator-name = "vdd_mpu"; |
||||
regulator-min-microvolt = <912000>; |
||||
regulator-max-microvolt = <1378000>; |
||||
regulator-boot-on; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
dcdc3: regulator-dcdc3 { |
||||
regulator-name = "vdcdc3"; |
||||
regulator-min-microvolt = <1500000>; |
||||
regulator-max-microvolt = <1500000>; |
||||
regulator-boot-on; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
dcdc5: regulator-dcdc5 { |
||||
regulator-name = "v1_0bat"; |
||||
regulator-min-microvolt = <1000000>; |
||||
regulator-max-microvolt = <1000000>; |
||||
regulator-boot-on; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
dcdc6: regulator-dcdc6 { |
||||
regulator-name = "v1_8bat"; |
||||
regulator-min-microvolt = <1800000>; |
||||
regulator-max-microvolt = <1800000>; |
||||
regulator-boot-on; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
ldo1: regulator-ldo1 { |
||||
regulator-min-microvolt = <1800000>; |
||||
regulator-max-microvolt = <1800000>; |
||||
regulator-boot-on; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
xyz: regulator@0 { |
||||
compatible = "ti,tps65218-dcdc1"; |
||||
regulator-min-microvolt = <1000000>; |
||||
regulator-max-microvolt = <3000000>; |
||||
ls3: regulator-ls3 { |
||||
regulator-min-microvolt = <100000>; |
||||
regulator-max-microvolt = <1000000>; |
||||
}; |
||||
}; |
||||
|
@ -0,0 +1,181 @@ |
||||
/* ADC MFD core driver for sunxi platforms
|
||||
* |
||||
* Copyright (c) 2016 Quentin Schulz <quentin.schulz@free-electrons.com> |
||||
* |
||||
* This program is free software; you can redistribute it and/or modify it |
||||
* under the terms of the GNU General Public License version 2 as published by |
||||
* the Free Software Foundation. |
||||
*/ |
||||
|
||||
#include <linux/interrupt.h> |
||||
#include <linux/kernel.h> |
||||
#include <linux/mfd/core.h> |
||||
#include <linux/module.h> |
||||
#include <linux/of_device.h> |
||||
#include <linux/of_irq.h> |
||||
#include <linux/regmap.h> |
||||
|
||||
#include <linux/mfd/sun4i-gpadc.h> |
||||
|
||||
#define ARCH_SUN4I_A10 0 |
||||
#define ARCH_SUN5I_A13 1 |
||||
#define ARCH_SUN6I_A31 2 |
||||
|
||||
static struct resource adc_resources[] = { |
||||
DEFINE_RES_IRQ_NAMED(SUN4I_GPADC_IRQ_FIFO_DATA, "FIFO_DATA_PENDING"), |
||||
DEFINE_RES_IRQ_NAMED(SUN4I_GPADC_IRQ_TEMP_DATA, "TEMP_DATA_PENDING"), |
||||
}; |
||||
|
||||
static const struct regmap_irq sun4i_gpadc_regmap_irq[] = { |
||||
REGMAP_IRQ_REG(SUN4I_GPADC_IRQ_FIFO_DATA, 0, |
||||
SUN4I_GPADC_INT_FIFOC_TP_DATA_IRQ_EN), |
||||
REGMAP_IRQ_REG(SUN4I_GPADC_IRQ_TEMP_DATA, 0, |
||||
SUN4I_GPADC_INT_FIFOC_TEMP_IRQ_EN), |
||||
}; |
||||
|
||||
static const struct regmap_irq_chip sun4i_gpadc_regmap_irq_chip = { |
||||
.name = "sun4i_gpadc_irq_chip", |
||||
.status_base = SUN4I_GPADC_INT_FIFOS, |
||||
.ack_base = SUN4I_GPADC_INT_FIFOS, |
||||
.mask_base = SUN4I_GPADC_INT_FIFOC, |
||||
.init_ack_masked = true, |
||||
.mask_invert = true, |
||||
.irqs = sun4i_gpadc_regmap_irq, |
||||
.num_irqs = ARRAY_SIZE(sun4i_gpadc_regmap_irq), |
||||
.num_regs = 1, |
||||
}; |
||||
|
||||
static struct mfd_cell sun4i_gpadc_cells[] = { |
||||
{ |
||||
.name = "sun4i-a10-gpadc-iio", |
||||
.resources = adc_resources, |
||||
.num_resources = ARRAY_SIZE(adc_resources), |
||||
}, |
||||
{ .name = "iio_hwmon" } |
||||
}; |
||||
|
||||
static struct mfd_cell sun5i_gpadc_cells[] = { |
||||
{ |
||||
.name = "sun5i-a13-gpadc-iio", |
||||
.resources = adc_resources, |
||||
.num_resources = ARRAY_SIZE(adc_resources), |
||||
}, |
||||
{ .name = "iio_hwmon" }, |
||||
}; |
||||
|
||||
static struct mfd_cell sun6i_gpadc_cells[] = { |
||||
{ |
||||
.name = "sun6i-a31-gpadc-iio", |
||||
.resources = adc_resources, |
||||
.num_resources = ARRAY_SIZE(adc_resources), |
||||
}, |
||||
{ .name = "iio_hwmon" }, |
||||
}; |
||||
|
||||
static const struct regmap_config sun4i_gpadc_regmap_config = { |
||||
.reg_bits = 32, |
||||
.val_bits = 32, |
||||
.reg_stride = 4, |
||||
.fast_io = true, |
||||
}; |
||||
|
||||
static const struct of_device_id sun4i_gpadc_of_match[] = { |
||||
{ |
||||
.compatible = "allwinner,sun4i-a10-ts", |
||||
.data = (void *)ARCH_SUN4I_A10, |
||||
}, { |
||||
.compatible = "allwinner,sun5i-a13-ts", |
||||
.data = (void *)ARCH_SUN5I_A13, |
||||
}, { |
||||
.compatible = "allwinner,sun6i-a31-ts", |
||||
.data = (void *)ARCH_SUN6I_A31, |
||||
}, { /* sentinel */ } |
||||
}; |
||||
|
||||
MODULE_DEVICE_TABLE(of, sun4i_gpadc_of_match); |
||||
|
||||
static int sun4i_gpadc_probe(struct platform_device *pdev) |
||||
{ |
||||
struct sun4i_gpadc_dev *dev; |
||||
struct resource *mem; |
||||
const struct of_device_id *of_id; |
||||
const struct mfd_cell *cells; |
||||
unsigned int irq, size; |
||||
int ret; |
||||
|
||||
of_id = of_match_node(sun4i_gpadc_of_match, pdev->dev.of_node); |
||||
if (!of_id) |
||||
return -EINVAL; |
||||
|
||||
switch ((long)of_id->data) { |
||||
case ARCH_SUN4I_A10: |
||||
cells = sun4i_gpadc_cells; |
||||
size = ARRAY_SIZE(sun4i_gpadc_cells); |
||||
break; |
||||
case ARCH_SUN5I_A13: |
||||
cells = sun5i_gpadc_cells; |
||||
size = ARRAY_SIZE(sun5i_gpadc_cells); |
||||
break; |
||||
case ARCH_SUN6I_A31: |
||||
cells = sun6i_gpadc_cells; |
||||
size = ARRAY_SIZE(sun6i_gpadc_cells); |
||||
break; |
||||
default: |
||||
return -EINVAL; |
||||
} |
||||
|
||||
dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); |
||||
if (!dev) |
||||
return -ENOMEM; |
||||
|
||||
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
||||
dev->base = devm_ioremap_resource(&pdev->dev, mem); |
||||
if (IS_ERR(dev->base)) |
||||
return PTR_ERR(dev->base); |
||||
|
||||
dev->dev = &pdev->dev; |
||||
dev_set_drvdata(dev->dev, dev); |
||||
|
||||
dev->regmap = devm_regmap_init_mmio(dev->dev, dev->base, |
||||
&sun4i_gpadc_regmap_config); |
||||
if (IS_ERR(dev->regmap)) { |
||||
ret = PTR_ERR(dev->regmap); |
||||
dev_err(&pdev->dev, "failed to init regmap: %d\n", ret); |
||||
return ret; |
||||
} |
||||
|
||||
/* Disable all interrupts */ |
||||
regmap_write(dev->regmap, SUN4I_GPADC_INT_FIFOC, 0); |
||||
|
||||
irq = platform_get_irq(pdev, 0); |
||||
ret = devm_regmap_add_irq_chip(&pdev->dev, dev->regmap, irq, |
||||
IRQF_ONESHOT, 0, |
||||
&sun4i_gpadc_regmap_irq_chip, |
||||
&dev->regmap_irqc); |
||||
if (ret) { |
||||
dev_err(&pdev->dev, "failed to add irq chip: %d\n", ret); |
||||
return ret; |
||||
} |
||||
|
||||
ret = devm_mfd_add_devices(dev->dev, 0, cells, size, NULL, 0, NULL); |
||||
if (ret) { |
||||
dev_err(&pdev->dev, "failed to add MFD devices: %d\n", ret); |
||||
return ret; |
||||
} |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
static struct platform_driver sun4i_gpadc_driver = { |
||||
.driver = { |
||||
.name = "sun4i-gpadc", |
||||
.of_match_table = of_match_ptr(sun4i_gpadc_of_match), |
||||
}, |
||||
.probe = sun4i_gpadc_probe, |
||||
}; |
||||
|
||||
module_platform_driver(sun4i_gpadc_driver); |
||||
|
||||
MODULE_DESCRIPTION("Allwinner sunxi platforms' GPADC MFD core driver"); |
||||
MODULE_AUTHOR("Quentin Schulz <quentin.schulz@free-electrons.com>"); |
||||
MODULE_LICENSE("GPL v2"); |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,94 @@ |
||||
/* Header of ADC MFD core driver for sunxi platforms
|
||||
* |
||||
* Copyright (c) 2016 Quentin Schulz <quentin.schulz@free-electrons.com> |
||||
* |
||||
* This program is free software; you can redistribute it and/or modify it under |
||||
* the terms of the GNU General Public License version 2 as published by the |
||||
* Free Software Foundation. |
||||
*/ |
||||
|
||||
#ifndef __SUN4I_GPADC__H__ |
||||
#define __SUN4I_GPADC__H__ |
||||
|
||||
#define SUN4I_GPADC_CTRL0 0x00 |
||||
|
||||
#define SUN4I_GPADC_CTRL0_ADC_FIRST_DLY(x) ((GENMASK(7, 0) & (x)) << 24) |
||||
#define SUN4I_GPADC_CTRL0_ADC_FIRST_DLY_MODE BIT(23) |
||||
#define SUN4I_GPADC_CTRL0_ADC_CLK_SELECT BIT(22) |
||||
#define SUN4I_GPADC_CTRL0_ADC_CLK_DIVIDER(x) ((GENMASK(1, 0) & (x)) << 20) |
||||
#define SUN4I_GPADC_CTRL0_FS_DIV(x) ((GENMASK(3, 0) & (x)) << 16) |
||||
#define SUN4I_GPADC_CTRL0_T_ACQ(x) (GENMASK(15, 0) & (x)) |
||||
|
||||
#define SUN4I_GPADC_CTRL1 0x04 |
||||
|
||||
#define SUN4I_GPADC_CTRL1_STYLUS_UP_DEBOUNCE(x) ((GENMASK(7, 0) & (x)) << 12) |
||||
#define SUN4I_GPADC_CTRL1_STYLUS_UP_DEBOUNCE_EN BIT(9) |
||||
#define SUN4I_GPADC_CTRL1_TOUCH_PAN_CALI_EN BIT(6) |
||||
#define SUN4I_GPADC_CTRL1_TP_DUAL_EN BIT(5) |
||||
#define SUN4I_GPADC_CTRL1_TP_MODE_EN BIT(4) |
||||
#define SUN4I_GPADC_CTRL1_TP_ADC_SELECT BIT(3) |
||||
#define SUN4I_GPADC_CTRL1_ADC_CHAN_SELECT(x) (GENMASK(2, 0) & (x)) |
||||
|
||||
/* TP_CTRL1 bits for sun6i SOCs */ |
||||
#define SUN6I_GPADC_CTRL1_TOUCH_PAN_CALI_EN BIT(7) |
||||
#define SUN6I_GPADC_CTRL1_TP_DUAL_EN BIT(6) |
||||
#define SUN6I_GPADC_CTRL1_TP_MODE_EN BIT(5) |
||||
#define SUN6I_GPADC_CTRL1_TP_ADC_SELECT BIT(4) |
||||
#define SUN6I_GPADC_CTRL1_ADC_CHAN_SELECT(x) (GENMASK(3, 0) & BIT(x)) |
||||
|
||||
#define SUN4I_GPADC_CTRL2 0x08 |
||||
|
||||
#define SUN4I_GPADC_CTRL2_TP_SENSITIVE_ADJUST(x) ((GENMASK(3, 0) & (x)) << 28) |
||||
#define SUN4I_GPADC_CTRL2_TP_MODE_SELECT(x) ((GENMASK(1, 0) & (x)) << 26) |
||||
#define SUN4I_GPADC_CTRL2_PRE_MEA_EN BIT(24) |
||||
#define SUN4I_GPADC_CTRL2_PRE_MEA_THRE_CNT(x) (GENMASK(23, 0) & (x)) |
||||
|
||||
#define SUN4I_GPADC_CTRL3 0x0c |
||||
|
||||
#define SUN4I_GPADC_CTRL3_FILTER_EN BIT(2) |
||||
#define SUN4I_GPADC_CTRL3_FILTER_TYPE(x) (GENMASK(1, 0) & (x)) |
||||
|
||||
#define SUN4I_GPADC_TPR 0x18 |
||||
|
||||
#define SUN4I_GPADC_TPR_TEMP_ENABLE BIT(16) |
||||
#define SUN4I_GPADC_TPR_TEMP_PERIOD(x) (GENMASK(15, 0) & (x)) |
||||
|
||||
#define SUN4I_GPADC_INT_FIFOC 0x10 |
||||
|
||||
#define SUN4I_GPADC_INT_FIFOC_TEMP_IRQ_EN BIT(18) |
||||
#define SUN4I_GPADC_INT_FIFOC_TP_OVERRUN_IRQ_EN BIT(17) |
||||
#define SUN4I_GPADC_INT_FIFOC_TP_DATA_IRQ_EN BIT(16) |
||||
#define SUN4I_GPADC_INT_FIFOC_TP_DATA_XY_CHANGE BIT(13) |
||||
#define SUN4I_GPADC_INT_FIFOC_TP_FIFO_TRIG_LEVEL(x) ((GENMASK(4, 0) & (x)) << 8) |
||||
#define SUN4I_GPADC_INT_FIFOC_TP_DATA_DRQ_EN BIT(7) |
||||
#define SUN4I_GPADC_INT_FIFOC_TP_FIFO_FLUSH BIT(4) |
||||
#define SUN4I_GPADC_INT_FIFOC_TP_UP_IRQ_EN BIT(1) |
||||
#define SUN4I_GPADC_INT_FIFOC_TP_DOWN_IRQ_EN BIT(0) |
||||
|
||||
#define SUN4I_GPADC_INT_FIFOS 0x14 |
||||
|
||||
#define SUN4I_GPADC_INT_FIFOS_TEMP_DATA_PENDING BIT(18) |
||||
#define SUN4I_GPADC_INT_FIFOS_FIFO_OVERRUN_PENDING BIT(17) |
||||
#define SUN4I_GPADC_INT_FIFOS_FIFO_DATA_PENDING BIT(16) |
||||
#define SUN4I_GPADC_INT_FIFOS_TP_IDLE_FLG BIT(2) |
||||
#define SUN4I_GPADC_INT_FIFOS_TP_UP_PENDING BIT(1) |
||||
#define SUN4I_GPADC_INT_FIFOS_TP_DOWN_PENDING BIT(0) |
||||
|
||||
#define SUN4I_GPADC_CDAT 0x1c |
||||
#define SUN4I_GPADC_TEMP_DATA 0x20 |
||||
#define SUN4I_GPADC_DATA 0x24 |
||||
|
||||
#define SUN4I_GPADC_IRQ_FIFO_DATA 0 |
||||
#define SUN4I_GPADC_IRQ_TEMP_DATA 1 |
||||
|
||||
/* 10s delay before suspending the IP */ |
||||
#define SUN4I_GPADC_AUTOSUSPEND_DELAY 10000 |
||||
|
||||
struct sun4i_gpadc_dev { |
||||
struct device *dev; |
||||
struct regmap *regmap; |
||||
struct regmap_irq_chip_data *regmap_irqc; |
||||
void __iomem *base; |
||||
}; |
||||
|
||||
#endif |
Loading…
Reference in new issue