Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e541454a authored by Olof Johansson's avatar Olof Johansson
Browse files

Merge tag 'arm-soc/for-4.19/drivers' of https://github.com/Broadcom/stblinux into next/drivers

This pull request contains Broadcom ARM/ARM64/MIPS SoCs drivers changes
for 4.19, please pull the following:

- Doug updates the low-level suspend/resume code for ARM SoCs to support
  the latest rev B3.0 memory controllers found on newer chips with an
  appropriate match structure to perform the correct entry sequencing

- Florian updates the Device Tree binding document for these memory
  controllers to list all possible compatible strings that exist given
   the supported memory controllers.

- Stefan adds the GET_THROTTLED firmware property value that is required
  for the Rasperry Pi voltage monitoring driver and updates the
  Raspberry Pi firmware driver accordingly to register such a device
  using the HWMON subsystem. Finally he adds support for reporting under
  voltage conditions using a specialized HWMON driver.

* tag 'arm-soc/for-4.19/drivers' of https://github.com/Broadcom/stblinux

:
  firmware: raspberrypi: Remove VLA usage
  firmware: raspberrypi: Register hwmon driver
  hwmon: Add support for RPi voltage sensor
  soc: bcm: brcmstb: Add missing DDR MEMC compatible strings
  soc: bcm: brcmstb: pm: Add support for newer rev B3.0 controllers
  ARM: bcm2835: Add GET_THROTTLED firmware property

Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents 872d6d96 5773898b
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -189,7 +189,11 @@ Power-Down (SRPD), among other things.

Required properties:
- compatible     : should contain one of these
	"brcm,brcmstb-memc-ddr-rev-b.2.1"
	"brcm,brcmstb-memc-ddr-rev-b.2.2"
	"brcm,brcmstb-memc-ddr-rev-b.2.3"
	"brcm,brcmstb-memc-ddr-rev-b.3.0"
	"brcm,brcmstb-memc-ddr-rev-b.3.1"
	"brcm,brcmstb-memc-ddr"
- reg            : the MEMC DDR register range

+22 −0
Original line number Diff line number Diff line
Kernel driver raspberrypi-hwmon
===============================

Supported boards:
  * Raspberry Pi A+ (via GPIO on SoC)
  * Raspberry Pi B+ (via GPIO on SoC)
  * Raspberry Pi 2 B (via GPIO on SoC)
  * Raspberry Pi 3 B (via GPIO on port expander)
  * Raspberry Pi 3 B+ (via PMIC)

Author: Stefan Wahren <stefan.wahren@i2se.com>

Description
-----------

This driver periodically polls a mailbox property of the VC4 firmware to detect
undervoltage conditions.

Sysfs entries
-------------

in0_lcrit_alarm		Undervoltage alarm
+27 −2
Original line number Diff line number Diff line
@@ -21,6 +21,10 @@
#define MBOX_DATA28(msg)		((msg) & ~0xf)
#define MBOX_CHAN_PROPERTY		8

#define MAX_RPI_FW_PROP_BUF_SIZE	32

static struct platform_device *rpi_hwmon;

struct rpi_firmware {
	struct mbox_client cl;
	struct mbox_chan *chan; /* The property channel. */
@@ -143,18 +147,22 @@ int rpi_firmware_property(struct rpi_firmware *fw,
	/* Single tags are very small (generally 8 bytes), so the
	 * stack should be safe.
	 */
	u8 data[buf_size + sizeof(struct rpi_firmware_property_tag_header)];
	u8 data[sizeof(struct rpi_firmware_property_tag_header) +
		MAX_RPI_FW_PROP_BUF_SIZE];
	struct rpi_firmware_property_tag_header *header =
		(struct rpi_firmware_property_tag_header *)data;
	int ret;

	if (WARN_ON(buf_size > sizeof(data) - sizeof(*header)))
		return -EINVAL;

	header->tag = tag;
	header->buf_size = buf_size;
	header->req_resp_size = 0;
	memcpy(data + sizeof(struct rpi_firmware_property_tag_header),
	       tag_data, buf_size);

	ret = rpi_firmware_property_list(fw, &data, sizeof(data));
	ret = rpi_firmware_property_list(fw, &data, buf_size + sizeof(*header));
	memcpy(tag_data,
	       data + sizeof(struct rpi_firmware_property_tag_header),
	       buf_size);
@@ -183,6 +191,20 @@ rpi_firmware_print_firmware_revision(struct rpi_firmware *fw)
	}
}

static void
rpi_register_hwmon_driver(struct device *dev, struct rpi_firmware *fw)
{
	u32 packet;
	int ret = rpi_firmware_property(fw, RPI_FIRMWARE_GET_THROTTLED,
					&packet, sizeof(packet));

	if (ret)
		return;

	rpi_hwmon = platform_device_register_data(dev, "raspberrypi-hwmon",
						  -1, NULL, 0);
}

static int rpi_firmware_probe(struct platform_device *pdev)
{
	struct device *dev = &pdev->dev;
@@ -209,6 +231,7 @@ static int rpi_firmware_probe(struct platform_device *pdev)
	platform_set_drvdata(pdev, fw);

	rpi_firmware_print_firmware_revision(fw);
	rpi_register_hwmon_driver(dev, fw);

	return 0;
}
@@ -217,6 +240,8 @@ static int rpi_firmware_remove(struct platform_device *pdev)
{
	struct rpi_firmware *fw = platform_get_drvdata(pdev);

	platform_device_unregister(rpi_hwmon);
	rpi_hwmon = NULL;
	mbox_free_channel(fw->chan);

	return 0;
+10 −0
Original line number Diff line number Diff line
@@ -1298,6 +1298,16 @@ config SENSORS_PWM_FAN
	  This driver can also be built as a module.  If so, the module
	  will be called pwm-fan.

config SENSORS_RASPBERRYPI_HWMON
	tristate "Raspberry Pi voltage monitor"
	depends on RASPBERRYPI_FIRMWARE || (COMPILE_TEST && !RASPBERRYPI_FIRMWARE)
	help
	  If you say yes here you get support for voltage sensor on the
	  Raspberry Pi.

	  This driver can also be built as a module. If so, the module
	  will be called raspberrypi-hwmon.

config SENSORS_SHT15
	tristate "Sensiron humidity and temperature sensors. SHT15 and compat."
	depends on GPIOLIB || COMPILE_TEST
+1 −0
Original line number Diff line number Diff line
@@ -141,6 +141,7 @@ obj-$(CONFIG_SENSORS_PC87427) += pc87427.o
obj-$(CONFIG_SENSORS_PCF8591)	+= pcf8591.o
obj-$(CONFIG_SENSORS_POWR1220)  += powr1220.o
obj-$(CONFIG_SENSORS_PWM_FAN)	+= pwm-fan.o
obj-$(CONFIG_SENSORS_RASPBERRYPI_HWMON)	+= raspberrypi-hwmon.o
obj-$(CONFIG_SENSORS_S3C)	+= s3c-hwmon.o
obj-$(CONFIG_SENSORS_SCH56XX_COMMON)+= sch56xx-common.o
obj-$(CONFIG_SENSORS_SCH5627)	+= sch5627.o
Loading