* [PATCH v2] staging: greybus: remove driver depending on nonexistent config option
@ 2026-09-15 2:02 Ethan Nelson-Moore
2026-10-01 9:19 ` Greg Kroah-Hartman
0 siblings, 1 reply; 3+ messages in thread
From: Ethan Nelson-Moore @ 2026-09-15 2:02 UTC (permalink / raw)
To: Jakub Kicinski, Namjae Jeon, Hisam Mehboob,
Martin Kepplinger-Novaković, greybus-dev, linux-staging
Cc: Agatha Isabelle Moreira, Ethan Nelson-Moore, Johan Hovold,
Alex Elder, Greg Kroah-Hartman
The Greybus Arche Platform driver depends on the config options
USB_HSIC_USB3613 or COMPILE_TEST. USB_HSIC_USB3613 has never existed in
mainline Linux, and COMPILE_TEST is intended to enable the compilation
of drivers on platforms that can't support them to improve code
coverage and ease testing of trivial or tree-wide changes. Therefore,
it is impossible for anyone to be using this driver with unmodified
mainline kernels. Remove it and move the former maintainer to the
CREDITS file.
Signed-off-by: Ethan Nelson-Moore <enelsonmoore@gmail.com>
---
Changes in v2: Clarify commit message - mention COMPILE_TEST
CREDITS | 4 +
MAINTAINERS | 7 -
drivers/staging/greybus/Kconfig | 9 -
drivers/staging/greybus/Makefile | 6 -
drivers/staging/greybus/arche-apb-ctrl.c | 490 -----------------
drivers/staging/greybus/arche-platform.c | 653 -----------------------
drivers/staging/greybus/arche_platform.h | 28 -
7 files changed, 4 insertions(+), 1193 deletions(-)
delete mode 100644 drivers/staging/greybus/arche-apb-ctrl.c
delete mode 100644 drivers/staging/greybus/arche-platform.c
delete mode 100644 drivers/staging/greybus/arche_platform.h
diff --git a/CREDITS b/CREDITS
index a0bd941ca5dd..9f74318ac0da 100644
--- a/CREDITS
+++ b/CREDITS
@@ -1717,6 +1717,10 @@ S: Talstr. 1
S: D - 72072 Tuebingen
S: Germany
+N: Vaibhav Hiremath
+E: hvaibhav.linux@gmail.com
+D: Greybus Arche Platform driver
+
N: Richard Hirst
E: richard@sleepie.demon.co.uk
E: rhirst@linuxcare.com
diff --git a/MAINTAINERS b/MAINTAINERS
index c2414447892c..ade7c36f9318 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -11315,13 +11315,6 @@ M: Bryan O'Donoghue <pure.logic@nexus-software.ie>
S: Maintained
F: drivers/staging/greybus/loopback.c
-GREYBUS PLATFORM DRIVERS
-M: Vaibhav Hiremath <hvaibhav.linux@gmail.com>
-S: Maintained
-F: drivers/staging/greybus/arche-apb-ctrl.c
-F: drivers/staging/greybus/arche-platform.c
-F: drivers/staging/greybus/arche_platform.h
-
GREYBUS SDIO/GPIO/SPI PROTOCOLS DRIVERS
M: Rui Miguel Silva <rmfrfs@gmail.com>
S: Maintained
diff --git a/drivers/staging/greybus/Kconfig b/drivers/staging/greybus/Kconfig
index 7635f3e850fa..c25da61570eb 100644
--- a/drivers/staging/greybus/Kconfig
+++ b/drivers/staging/greybus/Kconfig
@@ -204,13 +204,4 @@ config GREYBUS_USB
endif # GREYBUS_BRIDGED_PHY
-config GREYBUS_ARCHE
- tristate "Greybus Arche Platform driver"
- depends on USB_HSIC_USB3613 || COMPILE_TEST
- help
- Select this option if you have an Arche device.
-
- To compile this code as a module, chose M here: the module
- will be called gb-arche.ko
-
endif # GREYBUS
diff --git a/drivers/staging/greybus/Makefile b/drivers/staging/greybus/Makefile
index 7c5e89622334..7b9807f8a1a3 100644
--- a/drivers/staging/greybus/Makefile
+++ b/drivers/staging/greybus/Makefile
@@ -65,9 +65,3 @@ obj-$(CONFIG_GREYBUS_SDIO) += gb-sdio.o
obj-$(CONFIG_GREYBUS_SPI) += gb-spi.o gb-spilib.o
obj-$(CONFIG_GREYBUS_UART) += gb-uart.o
obj-$(CONFIG_GREYBUS_USB) += gb-usb.o
-
-
-# Greybus Platform driver
-gb-arche-y := arche-platform.o arche-apb-ctrl.o
-
-obj-$(CONFIG_GREYBUS_ARCHE) += gb-arche.o
diff --git a/drivers/staging/greybus/arche-apb-ctrl.c b/drivers/staging/greybus/arche-apb-ctrl.c
deleted file mode 100644
index 4302c2226126..000000000000
--- a/drivers/staging/greybus/arche-apb-ctrl.c
+++ /dev/null
@@ -1,490 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Arche Platform driver to control APB.
- *
- * Copyright 2014-2015 Google Inc.
- * Copyright 2014-2015 Linaro Ltd.
- */
-
-#include <linux/clk.h>
-#include <linux/delay.h>
-#include <linux/gpio/consumer.h>
-#include <linux/interrupt.h>
-#include <linux/module.h>
-#include <linux/pinctrl/consumer.h>
-#include <linux/platform_device.h>
-#include <linux/pm.h>
-#include <linux/property.h>
-#include <linux/regulator/consumer.h>
-#include <linux/spinlock.h>
-#include "arche_platform.h"
-
-static void apb_bootret_deassert(struct device *dev);
-
-struct arche_apb_ctrl_drvdata {
- /* Control GPIO signals to and from AP <=> AP Bridges */
- struct gpio_desc *resetn;
- struct gpio_desc *boot_ret;
- struct gpio_desc *pwroff;
- struct gpio_desc *wake_in;
- struct gpio_desc *wake_out;
- struct gpio_desc *pwrdn;
-
- enum arche_platform_state state;
- bool init_disabled;
-
- struct regulator *vcore;
- struct regulator *vio;
-
- struct gpio_desc *clk_en;
- struct clk *clk;
-
- struct pinctrl *pinctrl;
- struct pinctrl_state *pin_default;
-
- /* V2: SPI Bus control */
- struct gpio_desc *spi_en;
- bool spi_en_polarity_high;
-};
-
-/*
- * Note that these low level api's are active high
- */
-static inline void deassert_reset(struct gpio_desc *gpio)
-{
- gpiod_set_raw_value(gpio, 1);
-}
-
-static inline void assert_reset(struct gpio_desc *gpio)
-{
- gpiod_set_raw_value(gpio, 0);
-}
-
-/*
- * Note: Please do not modify the below sequence, as it is as per the spec
- */
-static int coldboot_seq(struct platform_device *pdev)
-{
- struct device *dev = &pdev->dev;
- struct arche_apb_ctrl_drvdata *apb = platform_get_drvdata(pdev);
- int ret;
-
- if (apb->init_disabled ||
- apb->state == ARCHE_PLATFORM_STATE_ACTIVE)
- return 0;
-
- /* Hold APB in reset state */
- assert_reset(apb->resetn);
-
- if (apb->state == ARCHE_PLATFORM_STATE_FW_FLASHING && apb->spi_en)
- devm_gpiod_put(dev, apb->spi_en);
-
- /* Enable power to APB */
- if (!IS_ERR(apb->vcore)) {
- ret = regulator_enable(apb->vcore);
- if (ret) {
- dev_err(dev, "failed to enable core regulator\n");
- return ret;
- }
- }
-
- if (!IS_ERR(apb->vio)) {
- ret = regulator_enable(apb->vio);
- if (ret) {
- dev_err(dev, "failed to enable IO regulator\n");
- return ret;
- }
- }
-
- apb_bootret_deassert(dev);
-
- /* On DB3 clock was not mandatory */
- if (apb->clk_en)
- gpiod_set_value(apb->clk_en, 1);
-
- usleep_range(100, 200);
-
- /* deassert reset to APB : Active-low signal */
- deassert_reset(apb->resetn);
-
- apb->state = ARCHE_PLATFORM_STATE_ACTIVE;
-
- return 0;
-}
-
-static int fw_flashing_seq(struct platform_device *pdev)
-{
- struct device *dev = &pdev->dev;
- struct arche_apb_ctrl_drvdata *apb = platform_get_drvdata(pdev);
- int ret;
-
- if (apb->init_disabled ||
- apb->state == ARCHE_PLATFORM_STATE_FW_FLASHING)
- return 0;
-
- ret = regulator_enable(apb->vcore);
- if (ret) {
- dev_err(dev, "failed to enable core regulator\n");
- return ret;
- }
-
- ret = regulator_enable(apb->vio);
- if (ret) {
- dev_err(dev, "failed to enable IO regulator\n");
- return ret;
- }
-
- if (apb->spi_en) {
- unsigned long flags;
-
- if (apb->spi_en_polarity_high)
- flags = GPIOD_OUT_HIGH;
- else
- flags = GPIOD_OUT_LOW;
-
- apb->spi_en = devm_gpiod_get(dev, "spi-en", flags);
- if (IS_ERR(apb->spi_en)) {
- ret = PTR_ERR(apb->spi_en);
- dev_err(dev, "Failed requesting SPI bus en GPIO: %d\n",
- ret);
- return ret;
- }
- }
-
- /* for flashing device should be in reset state */
- assert_reset(apb->resetn);
- apb->state = ARCHE_PLATFORM_STATE_FW_FLASHING;
-
- return 0;
-}
-
-static int standby_boot_seq(struct platform_device *pdev)
-{
- struct device *dev = &pdev->dev;
- struct arche_apb_ctrl_drvdata *apb = platform_get_drvdata(pdev);
-
- if (apb->init_disabled)
- return 0;
-
- /*
- * Even if it is in OFF state,
- * then we do not want to change the state
- */
- if (apb->state == ARCHE_PLATFORM_STATE_STANDBY ||
- apb->state == ARCHE_PLATFORM_STATE_OFF)
- return 0;
-
- if (apb->state == ARCHE_PLATFORM_STATE_FW_FLASHING && apb->spi_en)
- devm_gpiod_put(dev, apb->spi_en);
-
- /*
- * As per WDM spec, do nothing
- *
- * Pasted from WDM spec,
- * - A falling edge on POWEROFF_L is detected (a)
- * - WDM enters standby mode, but no output signals are changed
- */
-
- /* TODO: POWEROFF_L is input to WDM module */
- apb->state = ARCHE_PLATFORM_STATE_STANDBY;
- return 0;
-}
-
-static void poweroff_seq(struct platform_device *pdev)
-{
- struct device *dev = &pdev->dev;
- struct arche_apb_ctrl_drvdata *apb = platform_get_drvdata(pdev);
-
- if (apb->init_disabled || apb->state == ARCHE_PLATFORM_STATE_OFF)
- return;
-
- if (apb->state == ARCHE_PLATFORM_STATE_FW_FLASHING && apb->spi_en)
- devm_gpiod_put(dev, apb->spi_en);
-
- /* disable the clock */
- if (apb->clk_en)
- gpiod_set_value(apb->clk_en, 0);
-
- if (!IS_ERR(apb->vcore) && regulator_is_enabled(apb->vcore) > 0)
- regulator_disable(apb->vcore);
-
- if (!IS_ERR(apb->vio) && regulator_is_enabled(apb->vio) > 0)
- regulator_disable(apb->vio);
-
- /* As part of exit, put APB back in reset state */
- assert_reset(apb->resetn);
- apb->state = ARCHE_PLATFORM_STATE_OFF;
-
- /* TODO: May have to send an event to SVC about this exit */
-}
-
-static void apb_bootret_deassert(struct device *dev)
-{
- struct arche_apb_ctrl_drvdata *apb = dev_get_drvdata(dev);
-
- gpiod_set_value(apb->boot_ret, 0);
-}
-
-int apb_ctrl_coldboot(struct device *dev)
-{
- return coldboot_seq(to_platform_device(dev));
-}
-
-int apb_ctrl_fw_flashing(struct device *dev)
-{
- return fw_flashing_seq(to_platform_device(dev));
-}
-
-int apb_ctrl_standby_boot(struct device *dev)
-{
- return standby_boot_seq(to_platform_device(dev));
-}
-
-void apb_ctrl_poweroff(struct device *dev)
-{
- poweroff_seq(to_platform_device(dev));
-}
-
-static ssize_t state_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t count)
-{
- struct platform_device *pdev = to_platform_device(dev);
- struct arche_apb_ctrl_drvdata *apb = platform_get_drvdata(pdev);
- int ret = 0;
- bool is_disabled;
-
- if (sysfs_streq(buf, "off")) {
- if (apb->state == ARCHE_PLATFORM_STATE_OFF)
- return count;
-
- poweroff_seq(pdev);
- } else if (sysfs_streq(buf, "active")) {
- if (apb->state == ARCHE_PLATFORM_STATE_ACTIVE)
- return count;
-
- poweroff_seq(pdev);
- is_disabled = apb->init_disabled;
- apb->init_disabled = false;
- ret = coldboot_seq(pdev);
- if (ret)
- apb->init_disabled = is_disabled;
- } else if (sysfs_streq(buf, "standby")) {
- if (apb->state == ARCHE_PLATFORM_STATE_STANDBY)
- return count;
-
- ret = standby_boot_seq(pdev);
- } else if (sysfs_streq(buf, "fw_flashing")) {
- if (apb->state == ARCHE_PLATFORM_STATE_FW_FLASHING)
- return count;
-
- /*
- * First we want to make sure we power off everything
- * and then enter FW flashing state
- */
- poweroff_seq(pdev);
- ret = fw_flashing_seq(pdev);
- } else {
- dev_err(dev, "unknown state\n");
- ret = -EINVAL;
- }
-
- return ret ? ret : count;
-}
-
-static ssize_t state_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- struct arche_apb_ctrl_drvdata *apb = dev_get_drvdata(dev);
-
- switch (apb->state) {
- case ARCHE_PLATFORM_STATE_OFF:
- return sysfs_emit(buf, "off%s\n",
- apb->init_disabled ? ",disabled" : "");
- case ARCHE_PLATFORM_STATE_ACTIVE:
- return sysfs_emit(buf, "active\n");
- case ARCHE_PLATFORM_STATE_STANDBY:
- return sysfs_emit(buf, "standby\n");
- case ARCHE_PLATFORM_STATE_FW_FLASHING:
- return sysfs_emit(buf, "fw_flashing\n");
- default:
- return sysfs_emit(buf, "unknown state\n");
- }
-}
-
-static DEVICE_ATTR_RW(state);
-
-static int apb_ctrl_get_fw_data(struct platform_device *pdev,
- struct arche_apb_ctrl_drvdata *apb)
-{
- struct device *dev = &pdev->dev;
- int ret;
-
- apb->resetn = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
- if (IS_ERR(apb->resetn)) {
- ret = PTR_ERR(apb->resetn);
- dev_err(dev, "Failed requesting reset GPIO: %d\n", ret);
- return ret;
- }
-
- apb->boot_ret = devm_gpiod_get(dev, "boot-ret", GPIOD_OUT_LOW);
- if (IS_ERR(apb->boot_ret)) {
- ret = PTR_ERR(apb->boot_ret);
- dev_err(dev, "Failed requesting bootret GPIO: %d\n", ret);
- return ret;
- }
-
- /* It's not mandatory to support power management interface */
- apb->pwroff = devm_gpiod_get_optional(dev, "pwr-off", GPIOD_IN);
- if (IS_ERR(apb->pwroff)) {
- ret = PTR_ERR(apb->pwroff);
- dev_err(dev, "Failed requesting pwroff_n GPIO: %d\n", ret);
- return ret;
- }
-
- /* Do not make clock mandatory as of now (for DB3) */
- apb->clk_en = devm_gpiod_get_optional(dev, "clock-en", GPIOD_OUT_LOW);
- if (IS_ERR(apb->clk_en)) {
- ret = PTR_ERR(apb->clk_en);
- dev_err(dev, "Failed requesting APB clock en GPIO: %d\n", ret);
- return ret;
- }
-
- apb->pwrdn = devm_gpiod_get(dev, "pwr-down", GPIOD_OUT_LOW);
- if (IS_ERR(apb->pwrdn)) {
- ret = PTR_ERR(apb->pwrdn);
- dev_warn(dev, "Failed requesting power down GPIO: %d\n", ret);
- return ret;
- }
-
- /* Regulators are optional, as we may have fixed supply coming in */
- apb->vcore = devm_regulator_get(dev, "vcore");
- if (IS_ERR(apb->vcore))
- dev_warn(dev, "no core regulator found\n");
-
- apb->vio = devm_regulator_get(dev, "vio");
- if (IS_ERR(apb->vio))
- dev_warn(dev, "no IO regulator found\n");
-
- apb->pinctrl = devm_pinctrl_get(&pdev->dev);
- if (IS_ERR(apb->pinctrl)) {
- dev_err(&pdev->dev, "could not get pinctrl handle\n");
- return PTR_ERR(apb->pinctrl);
- }
- apb->pin_default = pinctrl_lookup_state(apb->pinctrl, "default");
- if (IS_ERR(apb->pin_default)) {
- dev_err(&pdev->dev, "could not get default pin state\n");
- return PTR_ERR(apb->pin_default);
- }
-
- /* Only applicable for platform >= V2 */
- if (device_property_read_bool(&pdev->dev, "gb,spi-en-active-high"))
- apb->spi_en_polarity_high = true;
-
- return 0;
-}
-
-static int arche_apb_ctrl_probe(struct platform_device *pdev)
-{
- int ret;
- struct arche_apb_ctrl_drvdata *apb;
- struct device *dev = &pdev->dev;
-
- apb = devm_kzalloc(&pdev->dev, sizeof(*apb), GFP_KERNEL);
- if (!apb)
- return -ENOMEM;
-
- ret = apb_ctrl_get_fw_data(pdev, apb);
- if (ret) {
- dev_err(dev, "failed to get apb devicetree data %d\n", ret);
- return ret;
- }
-
- /* Initially set APB to OFF state */
- apb->state = ARCHE_PLATFORM_STATE_OFF;
- /* Check whether device needs to be enabled on boot */
- if (device_property_read_bool(&pdev->dev, "arche,init-disable"))
- apb->init_disabled = true;
-
- platform_set_drvdata(pdev, apb);
-
- /* Create sysfs interface to allow user to change state dynamically */
- ret = device_create_file(dev, &dev_attr_state);
- if (ret) {
- dev_err(dev, "failed to create state file in sysfs\n");
- return ret;
- }
-
- dev_info(&pdev->dev, "Device registered successfully\n");
- return 0;
-}
-
-static void arche_apb_ctrl_remove(struct platform_device *pdev)
-{
- device_remove_file(&pdev->dev, &dev_attr_state);
- poweroff_seq(pdev);
- platform_set_drvdata(pdev, NULL);
-}
-
-static int __maybe_unused arche_apb_ctrl_suspend(struct device *dev)
-{
- /*
- * If timing profile permits, we may shutdown bridge
- * completely
- *
- * TODO: sequence ??
- *
- * Also, need to make sure we meet precondition for unipro suspend
- * Precondition: Definition ???
- */
- return 0;
-}
-
-static int __maybe_unused arche_apb_ctrl_resume(struct device *dev)
-{
- /*
- * At least for ES2 we have to meet the delay requirement between
- * unipro switch and AP bridge init, depending on whether bridge is in
- * OFF state or standby state.
- *
- * Based on whether bridge is in standby or OFF state we may have to
- * assert multiple signals. Please refer to WDM spec, for more info.
- *
- */
- return 0;
-}
-
-static void arche_apb_ctrl_shutdown(struct platform_device *pdev)
-{
- apb_ctrl_poweroff(&pdev->dev);
-}
-
-static SIMPLE_DEV_PM_OPS(arche_apb_ctrl_pm_ops, arche_apb_ctrl_suspend,
- arche_apb_ctrl_resume);
-
-static const struct of_device_id arche_apb_ctrl_of_match[] = {
- { .compatible = "usbffff,2", },
- { },
-};
-MODULE_DEVICE_TABLE(of, arche_apb_ctrl_of_match);
-
-static struct platform_driver arche_apb_ctrl_device_driver = {
- .probe = arche_apb_ctrl_probe,
- .remove = arche_apb_ctrl_remove,
- .shutdown = arche_apb_ctrl_shutdown,
- .driver = {
- .name = "arche-apb-ctrl",
- .pm = &arche_apb_ctrl_pm_ops,
- .of_match_table = arche_apb_ctrl_of_match,
- }
-};
-
-int __init arche_apb_init(void)
-{
- return platform_driver_register(&arche_apb_ctrl_device_driver);
-}
-
-void __exit arche_apb_exit(void)
-{
- platform_driver_unregister(&arche_apb_ctrl_device_driver);
-}
diff --git a/drivers/staging/greybus/arche-platform.c b/drivers/staging/greybus/arche-platform.c
deleted file mode 100644
index de5de59ea8ab..000000000000
--- a/drivers/staging/greybus/arche-platform.c
+++ /dev/null
@@ -1,653 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Arche Platform driver to enable Unipro link.
- *
- * Copyright 2014-2015 Google Inc.
- * Copyright 2014-2015 Linaro Ltd.
- */
-
-#include <linux/clk.h>
-#include <linux/delay.h>
-#include <linux/gpio/consumer.h>
-#include <linux/init.h>
-#include <linux/module.h>
-#include <linux/of_platform.h>
-#include <linux/pinctrl/consumer.h>
-#include <linux/platform_device.h>
-#include <linux/pm.h>
-#include <linux/interrupt.h>
-#include <linux/irq.h>
-#include <linux/suspend.h>
-#include <linux/time.h>
-#include <linux/greybus.h>
-#include <linux/of.h>
-#include "arche_platform.h"
-
-#if IS_ENABLED(CONFIG_USB_HSIC_USB3613)
-#include <linux/usb/usb3613.h>
-#else
-static inline int usb3613_hub_mode_ctrl(bool unused)
-{
- return 0;
-}
-#endif
-
-#define WD_COLDBOOT_PULSE_WIDTH_MS 30
-
-enum svc_wakedetect_state {
- WD_STATE_IDLE, /* Default state = pulled high/low */
- WD_STATE_BOOT_INIT, /* WD = falling edge (low) */
- WD_STATE_COLDBOOT_TRIG, /* WD = rising edge (high), > 30msec */
- WD_STATE_STANDBYBOOT_TRIG, /* As of now not used ?? */
- WD_STATE_COLDBOOT_START, /* Cold boot process started */
- WD_STATE_STANDBYBOOT_START, /* Not used */
-};
-
-struct arche_platform_drvdata {
- /* Control GPIO signals to and from AP <=> SVC */
- struct gpio_desc *svc_reset;
- bool is_reset_act_hi;
- struct gpio_desc *svc_sysboot;
- struct gpio_desc *wake_detect; /* bi-dir,maps to WAKE_MOD & WAKE_FRAME signals */
-
- enum arche_platform_state state;
-
- struct gpio_desc *svc_refclk_req;
- struct clk *svc_ref_clk;
-
- struct pinctrl *pinctrl;
- struct pinctrl_state *pin_default;
-
- int num_apbs;
-
- enum svc_wakedetect_state wake_detect_state;
- int wake_detect_irq;
- spinlock_t wake_lock; /* Protect wake_detect_state */
- struct mutex platform_state_mutex; /* Protect state */
- unsigned long wake_detect_start;
- struct notifier_block pm_notifier;
-
- struct device *dev;
-};
-
-/* Requires calling context to hold arche_pdata->platform_state_mutex */
-static void arche_platform_set_state(struct arche_platform_drvdata *arche_pdata,
- enum arche_platform_state state)
-{
- arche_pdata->state = state;
-}
-
-/* Requires arche_pdata->wake_lock is held by calling context */
-static void arche_platform_set_wake_detect_state(struct arche_platform_drvdata *arche_pdata,
- enum svc_wakedetect_state state)
-{
- arche_pdata->wake_detect_state = state;
-}
-
-static inline void svc_reset_onoff(struct gpio_desc *gpio, bool onoff)
-{
- gpiod_set_raw_value(gpio, onoff);
-}
-
-static int apb_cold_boot(struct device *dev, void *data)
-{
- int ret;
-
- ret = apb_ctrl_coldboot(dev);
- if (ret)
- dev_warn(dev, "failed to coldboot\n");
-
- /*Child nodes are independent, so do not exit coldboot operation */
- return 0;
-}
-
-static int apb_poweroff(struct device *dev, void *data)
-{
- apb_ctrl_poweroff(dev);
-
- /* Enable HUB3613 into HUB mode. */
- if (usb3613_hub_mode_ctrl(false))
- dev_warn(dev, "failed to control hub device\n");
-
- return 0;
-}
-
-static void arche_platform_wd_irq_en(struct arche_platform_drvdata *arche_pdata)
-{
- /* Enable interrupt here, to read event back from SVC */
- enable_irq(arche_pdata->wake_detect_irq);
-}
-
-static irqreturn_t arche_platform_wd_irq_thread(int irq, void *devid)
-{
- struct arche_platform_drvdata *arche_pdata = devid;
- unsigned long flags;
-
- spin_lock_irqsave(&arche_pdata->wake_lock, flags);
- if (arche_pdata->wake_detect_state != WD_STATE_COLDBOOT_TRIG) {
- /* Something is wrong */
- spin_unlock_irqrestore(&arche_pdata->wake_lock, flags);
- return IRQ_HANDLED;
- }
-
- arche_platform_set_wake_detect_state(arche_pdata,
- WD_STATE_COLDBOOT_START);
- spin_unlock_irqrestore(&arche_pdata->wake_lock, flags);
-
- /* It should complete power cycle, so first make sure it is poweroff */
- device_for_each_child(arche_pdata->dev, NULL, apb_poweroff);
-
- /* Bring APB out of reset: cold boot sequence */
- device_for_each_child(arche_pdata->dev, NULL, apb_cold_boot);
-
- /* Enable HUB3613 into HUB mode. */
- if (usb3613_hub_mode_ctrl(true))
- dev_warn(arche_pdata->dev, "failed to control hub device\n");
-
- spin_lock_irqsave(&arche_pdata->wake_lock, flags);
- arche_platform_set_wake_detect_state(arche_pdata, WD_STATE_IDLE);
- spin_unlock_irqrestore(&arche_pdata->wake_lock, flags);
-
- return IRQ_HANDLED;
-}
-
-static irqreturn_t arche_platform_wd_irq(int irq, void *devid)
-{
- struct arche_platform_drvdata *arche_pdata = devid;
- unsigned long flags;
-
- spin_lock_irqsave(&arche_pdata->wake_lock, flags);
-
- if (gpiod_get_value(arche_pdata->wake_detect)) {
- /* wake/detect rising */
-
- /*
- * If wake/detect line goes high after low, within less than
- * 30msec, then standby boot sequence is initiated, which is not
- * supported/implemented as of now. So ignore it.
- */
- if (arche_pdata->wake_detect_state == WD_STATE_BOOT_INIT) {
- if (time_before(jiffies,
- arche_pdata->wake_detect_start +
- msecs_to_jiffies(WD_COLDBOOT_PULSE_WIDTH_MS))) {
- arche_platform_set_wake_detect_state(arche_pdata,
- WD_STATE_IDLE);
- } else {
- /*
- * Check we are not in middle of irq thread
- * already
- */
- if (arche_pdata->wake_detect_state !=
- WD_STATE_COLDBOOT_START) {
- arche_platform_set_wake_detect_state(arche_pdata,
- WD_STATE_COLDBOOT_TRIG);
- spin_unlock_irqrestore(&arche_pdata->wake_lock,
- flags);
- return IRQ_WAKE_THREAD;
- }
- }
- }
- } else {
- /* wake/detect falling */
- if (arche_pdata->wake_detect_state == WD_STATE_IDLE) {
- arche_pdata->wake_detect_start = jiffies;
- /*
- * In the beginning, when wake/detect goes low
- * (first time), we assume it is meant for coldboot
- * and set the flag. If wake/detect line stays low
- * beyond 30msec, then it is coldboot else fallback
- * to standby boot.
- */
- arche_platform_set_wake_detect_state(arche_pdata,
- WD_STATE_BOOT_INIT);
- }
- }
-
- spin_unlock_irqrestore(&arche_pdata->wake_lock, flags);
-
- return IRQ_HANDLED;
-}
-
-/*
- * Requires arche_pdata->platform_state_mutex to be held
- */
-static int
-arche_platform_coldboot_seq(struct arche_platform_drvdata *arche_pdata)
-{
- int ret;
-
- if (arche_pdata->state == ARCHE_PLATFORM_STATE_ACTIVE)
- return 0;
-
- dev_info(arche_pdata->dev, "Booting from cold boot state\n");
-
- svc_reset_onoff(arche_pdata->svc_reset, arche_pdata->is_reset_act_hi);
-
- gpiod_set_value(arche_pdata->svc_sysboot, 0);
- usleep_range(100, 200);
-
- ret = clk_prepare_enable(arche_pdata->svc_ref_clk);
- if (ret) {
- dev_err(arche_pdata->dev, "failed to enable svc_ref_clk: %d\n",
- ret);
- return ret;
- }
-
- /* bring SVC out of reset */
- svc_reset_onoff(arche_pdata->svc_reset, !arche_pdata->is_reset_act_hi);
-
- arche_platform_set_state(arche_pdata, ARCHE_PLATFORM_STATE_ACTIVE);
-
- return 0;
-}
-
-/*
- * Requires arche_pdata->platform_state_mutex to be held
- */
-static int
-arche_platform_fw_flashing_seq(struct arche_platform_drvdata *arche_pdata)
-{
- int ret;
-
- if (arche_pdata->state == ARCHE_PLATFORM_STATE_FW_FLASHING)
- return 0;
-
- dev_info(arche_pdata->dev, "Switching to FW flashing state\n");
-
- svc_reset_onoff(arche_pdata->svc_reset, arche_pdata->is_reset_act_hi);
-
- gpiod_set_value(arche_pdata->svc_sysboot, 1);
-
- usleep_range(100, 200);
-
- ret = clk_prepare_enable(arche_pdata->svc_ref_clk);
- if (ret) {
- dev_err(arche_pdata->dev, "failed to enable svc_ref_clk: %d\n",
- ret);
- return ret;
- }
-
- svc_reset_onoff(arche_pdata->svc_reset, !arche_pdata->is_reset_act_hi);
-
- arche_platform_set_state(arche_pdata, ARCHE_PLATFORM_STATE_FW_FLASHING);
-
- return 0;
-}
-
-/*
- * Requires arche_pdata->platform_state_mutex to be held
- */
-static void
-arche_platform_poweroff_seq(struct arche_platform_drvdata *arche_pdata)
-{
- unsigned long flags;
-
- if (arche_pdata->state == ARCHE_PLATFORM_STATE_OFF)
- return;
-
- /* If in fw_flashing mode, then no need to repeate things again */
- if (arche_pdata->state != ARCHE_PLATFORM_STATE_FW_FLASHING) {
- disable_irq(arche_pdata->wake_detect_irq);
-
- spin_lock_irqsave(&arche_pdata->wake_lock, flags);
- arche_platform_set_wake_detect_state(arche_pdata,
- WD_STATE_IDLE);
- spin_unlock_irqrestore(&arche_pdata->wake_lock, flags);
- }
-
- clk_disable_unprepare(arche_pdata->svc_ref_clk);
-
- /* As part of exit, put APB back in reset state */
- svc_reset_onoff(arche_pdata->svc_reset, arche_pdata->is_reset_act_hi);
-
- arche_platform_set_state(arche_pdata, ARCHE_PLATFORM_STATE_OFF);
-}
-
-static ssize_t state_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t count)
-{
- struct arche_platform_drvdata *arche_pdata = dev_get_drvdata(dev);
- int ret = 0;
-
- mutex_lock(&arche_pdata->platform_state_mutex);
-
- if (sysfs_streq(buf, "off")) {
- if (arche_pdata->state == ARCHE_PLATFORM_STATE_OFF)
- goto exit;
-
- /* If SVC goes down, bring down APB's as well */
- device_for_each_child(arche_pdata->dev, NULL, apb_poweroff);
-
- arche_platform_poweroff_seq(arche_pdata);
-
- } else if (sysfs_streq(buf, "active")) {
- if (arche_pdata->state == ARCHE_PLATFORM_STATE_ACTIVE)
- goto exit;
-
- /* First we want to make sure we power off everything
- * and then activate back again
- */
- device_for_each_child(arche_pdata->dev, NULL, apb_poweroff);
- arche_platform_poweroff_seq(arche_pdata);
-
- arche_platform_wd_irq_en(arche_pdata);
- ret = arche_platform_coldboot_seq(arche_pdata);
- if (ret)
- goto exit;
-
- } else if (sysfs_streq(buf, "standby")) {
- if (arche_pdata->state == ARCHE_PLATFORM_STATE_STANDBY)
- goto exit;
-
- dev_warn(arche_pdata->dev, "standby state not supported\n");
- } else if (sysfs_streq(buf, "fw_flashing")) {
- if (arche_pdata->state == ARCHE_PLATFORM_STATE_FW_FLASHING)
- goto exit;
-
- /*
- * Here we only control SVC.
- *
- * In case of FW_FLASHING mode we do not want to control
- * APBs, as in case of V2, SPI bus is shared between both
- * the APBs. So let user chose which APB he wants to flash.
- */
- arche_platform_poweroff_seq(arche_pdata);
-
- ret = arche_platform_fw_flashing_seq(arche_pdata);
- if (ret)
- goto exit;
- } else {
- dev_err(arche_pdata->dev, "unknown state\n");
- ret = -EINVAL;
- }
-
-exit:
- mutex_unlock(&arche_pdata->platform_state_mutex);
- return ret ? ret : count;
-}
-
-static ssize_t state_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- struct arche_platform_drvdata *arche_pdata = dev_get_drvdata(dev);
-
- switch (arche_pdata->state) {
- case ARCHE_PLATFORM_STATE_OFF:
- return sysfs_emit(buf, "off\n");
- case ARCHE_PLATFORM_STATE_ACTIVE:
- return sysfs_emit(buf, "active\n");
- case ARCHE_PLATFORM_STATE_STANDBY:
- return sysfs_emit(buf, "standby\n");
- case ARCHE_PLATFORM_STATE_FW_FLASHING:
- return sysfs_emit(buf, "fw_flashing\n");
- default:
- return sysfs_emit(buf, "unknown state\n");
- }
-}
-
-static DEVICE_ATTR_RW(state);
-
-static int arche_platform_pm_notifier(struct notifier_block *notifier,
- unsigned long pm_event, void *unused)
-{
- struct arche_platform_drvdata *arche_pdata =
- container_of(notifier, struct arche_platform_drvdata,
- pm_notifier);
- int ret = NOTIFY_DONE;
-
- mutex_lock(&arche_pdata->platform_state_mutex);
- switch (pm_event) {
- case PM_SUSPEND_PREPARE:
- if (arche_pdata->state != ARCHE_PLATFORM_STATE_ACTIVE) {
- ret = NOTIFY_STOP;
- break;
- }
- device_for_each_child(arche_pdata->dev, NULL, apb_poweroff);
- arche_platform_poweroff_seq(arche_pdata);
- break;
- case PM_POST_SUSPEND:
- if (arche_pdata->state != ARCHE_PLATFORM_STATE_OFF)
- break;
-
- arche_platform_wd_irq_en(arche_pdata);
- arche_platform_coldboot_seq(arche_pdata);
- break;
- default:
- break;
- }
- mutex_unlock(&arche_pdata->platform_state_mutex);
-
- return ret;
-}
-
-static int arche_platform_probe(struct platform_device *pdev)
-{
- struct arche_platform_drvdata *arche_pdata;
- struct device *dev = &pdev->dev;
- struct device_node *np = dev->of_node;
- int ret;
- unsigned int flags;
-
- arche_pdata = devm_kzalloc(&pdev->dev, sizeof(*arche_pdata),
- GFP_KERNEL);
- if (!arche_pdata)
- return -ENOMEM;
-
- /* setup svc reset gpio */
- arche_pdata->is_reset_act_hi = of_property_read_bool(np,
- "svc,reset-active-high");
- if (arche_pdata->is_reset_act_hi)
- flags = GPIOD_OUT_HIGH;
- else
- flags = GPIOD_OUT_LOW;
-
- arche_pdata->svc_reset = devm_gpiod_get(dev, "svc,reset", flags);
- if (IS_ERR(arche_pdata->svc_reset)) {
- ret = PTR_ERR(arche_pdata->svc_reset);
- dev_err(dev, "failed to request svc-reset GPIO: %d\n", ret);
- return ret;
- }
- arche_platform_set_state(arche_pdata, ARCHE_PLATFORM_STATE_OFF);
-
- arche_pdata->svc_sysboot = devm_gpiod_get(dev, "svc,sysboot",
- GPIOD_OUT_LOW);
- if (IS_ERR(arche_pdata->svc_sysboot)) {
- ret = PTR_ERR(arche_pdata->svc_sysboot);
- dev_err(dev, "failed to request sysboot0 GPIO: %d\n", ret);
- return ret;
- }
-
- /* setup the clock request gpio first */
- arche_pdata->svc_refclk_req = devm_gpiod_get(dev, "svc,refclk-req",
- GPIOD_IN);
- if (IS_ERR(arche_pdata->svc_refclk_req)) {
- ret = PTR_ERR(arche_pdata->svc_refclk_req);
- dev_err(dev, "failed to request svc-clk-req GPIO: %d\n", ret);
- return ret;
- }
-
- /* setup refclk2 to follow the pin */
- arche_pdata->svc_ref_clk = devm_clk_get(dev, "svc_ref_clk");
- if (IS_ERR(arche_pdata->svc_ref_clk)) {
- ret = PTR_ERR(arche_pdata->svc_ref_clk);
- dev_err(dev, "failed to get svc_ref_clk: %d\n", ret);
- return ret;
- }
-
- platform_set_drvdata(pdev, arche_pdata);
-
- arche_pdata->num_apbs = of_get_child_count(np);
- dev_dbg(dev, "Number of APB's available - %d\n", arche_pdata->num_apbs);
-
- arche_pdata->wake_detect = devm_gpiod_get(dev, "svc,wake-detect",
- GPIOD_IN);
- if (IS_ERR(arche_pdata->wake_detect)) {
- ret = PTR_ERR(arche_pdata->wake_detect);
- dev_err(dev, "Failed requesting wake_detect GPIO: %d\n", ret);
- return ret;
- }
-
- arche_platform_set_wake_detect_state(arche_pdata, WD_STATE_IDLE);
-
- arche_pdata->dev = &pdev->dev;
-
- spin_lock_init(&arche_pdata->wake_lock);
- mutex_init(&arche_pdata->platform_state_mutex);
- arche_pdata->wake_detect_irq =
- gpiod_to_irq(arche_pdata->wake_detect);
-
- ret = devm_request_threaded_irq(dev, arche_pdata->wake_detect_irq,
- arche_platform_wd_irq,
- arche_platform_wd_irq_thread,
- IRQF_TRIGGER_FALLING |
- IRQF_TRIGGER_RISING | IRQF_ONESHOT,
- dev_name(dev), arche_pdata);
- if (ret) {
- dev_err(dev, "failed to request wake detect IRQ %d\n", ret);
- return ret;
- }
- disable_irq(arche_pdata->wake_detect_irq);
-
- ret = device_create_file(dev, &dev_attr_state);
- if (ret) {
- dev_err(dev, "failed to create state file in sysfs\n");
- return ret;
- }
-
- ret = of_platform_populate(np, NULL, NULL, dev);
- if (ret) {
- dev_err(dev, "failed to populate child nodes %d\n", ret);
- goto err_device_remove;
- }
-
- arche_pdata->pm_notifier.notifier_call = arche_platform_pm_notifier;
- ret = register_pm_notifier(&arche_pdata->pm_notifier);
- if (ret) {
- dev_err(dev, "failed to register pm notifier %d\n", ret);
- goto err_depopulate;
- }
-
- /* Explicitly power off if requested */
- if (!of_property_read_bool(pdev->dev.of_node, "arche,init-off")) {
- mutex_lock(&arche_pdata->platform_state_mutex);
- ret = arche_platform_coldboot_seq(arche_pdata);
- if (ret) {
- mutex_unlock(&arche_pdata->platform_state_mutex);
- dev_err(dev, "Failed to cold boot svc %d\n", ret);
- goto err_unregister_pm_notifier;
- }
- arche_platform_wd_irq_en(arche_pdata);
- mutex_unlock(&arche_pdata->platform_state_mutex);
- }
-
- dev_info(dev, "Device registered successfully\n");
- return 0;
-
-err_unregister_pm_notifier:
- unregister_pm_notifier(&arche_pdata->pm_notifier);
-err_depopulate:
- of_platform_depopulate(dev);
-err_device_remove:
- device_remove_file(&pdev->dev, &dev_attr_state);
- return ret;
-}
-
-static void arche_platform_remove(struct platform_device *pdev)
-{
- struct arche_platform_drvdata *arche_pdata = platform_get_drvdata(pdev);
-
- unregister_pm_notifier(&arche_pdata->pm_notifier);
- device_remove_file(&pdev->dev, &dev_attr_state);
- of_platform_depopulate(&pdev->dev);
- arche_platform_poweroff_seq(arche_pdata);
-
- if (usb3613_hub_mode_ctrl(false))
- dev_warn(arche_pdata->dev, "failed to control hub device\n");
-}
-
-static __maybe_unused int arche_platform_suspend(struct device *dev)
-{
- /*
- * If timing profile permits, we may shutdown bridge
- * completely
- *
- * TODO: define shutdown sequence
- *
- * Also, need to make sure we meet precondition for unipro suspend
- * Precondition: Definition ???
- */
- return 0;
-}
-
-static __maybe_unused int arche_platform_resume(struct device *dev)
-{
- /*
- * At least for ES2 we have to meet the delay requirement between
- * unipro switch and AP bridge init, depending on whether bridge is in
- * OFF state or standby state.
- *
- * Based on whether bridge is in standby or OFF state we may have to
- * assert multiple signals. Please refer to WDM spec, for more info.
- *
- */
- return 0;
-}
-
-static void arche_platform_shutdown(struct platform_device *pdev)
-{
- struct arche_platform_drvdata *arche_pdata = platform_get_drvdata(pdev);
-
- arche_platform_poweroff_seq(arche_pdata);
-
- usb3613_hub_mode_ctrl(false);
-}
-
-static SIMPLE_DEV_PM_OPS(arche_platform_pm_ops,
- arche_platform_suspend,
- arche_platform_resume);
-
-static const struct of_device_id arche_platform_of_match[] = {
- /* Use PID/VID of SVC device */
- { .compatible = "google,arche-platform", },
- { },
-};
-MODULE_DEVICE_TABLE(of, arche_platform_of_match);
-
-static struct platform_driver arche_platform_device_driver = {
- .probe = arche_platform_probe,
- .remove = arche_platform_remove,
- .shutdown = arche_platform_shutdown,
- .driver = {
- .name = "arche-platform-ctrl",
- .pm = &arche_platform_pm_ops,
- .of_match_table = arche_platform_of_match,
- }
-};
-
-static int __init arche_init(void)
-{
- int retval;
-
- retval = platform_driver_register(&arche_platform_device_driver);
- if (retval)
- return retval;
-
- retval = arche_apb_init();
- if (retval)
- platform_driver_unregister(&arche_platform_device_driver);
-
- return retval;
-}
-module_init(arche_init);
-
-static void __exit arche_exit(void)
-{
- arche_apb_exit();
- platform_driver_unregister(&arche_platform_device_driver);
-}
-module_exit(arche_exit);
-
-MODULE_LICENSE("GPL v2");
-MODULE_AUTHOR("Vaibhav Hiremath <vaibhav.hiremath@linaro.org>");
-MODULE_DESCRIPTION("Arche Platform Driver");
diff --git a/drivers/staging/greybus/arche_platform.h b/drivers/staging/greybus/arche_platform.h
deleted file mode 100644
index 9d997f2d6517..000000000000
--- a/drivers/staging/greybus/arche_platform.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Arche Platform driver to enable Unipro link.
- *
- * Copyright 2015-2016 Google Inc.
- * Copyright 2015-2016 Linaro Ltd.
- */
-
-#ifndef __ARCHE_PLATFORM_H
-#define __ARCHE_PLATFORM_H
-
-enum arche_platform_state {
- ARCHE_PLATFORM_STATE_OFF,
- ARCHE_PLATFORM_STATE_ACTIVE,
- ARCHE_PLATFORM_STATE_STANDBY,
- ARCHE_PLATFORM_STATE_FW_FLASHING,
-};
-
-int __init arche_apb_init(void);
-void __exit arche_apb_exit(void);
-
-/* Operational states for the APB device */
-int apb_ctrl_coldboot(struct device *dev);
-int apb_ctrl_fw_flashing(struct device *dev);
-int apb_ctrl_standby_boot(struct device *dev);
-void apb_ctrl_poweroff(struct device *dev);
-
-#endif /* __ARCHE_PLATFORM_H */
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2] staging: greybus: remove driver depending on nonexistent config option
2026-09-15 2:02 [PATCH v2] staging: greybus: remove driver depending on nonexistent config option Ethan Nelson-Moore
@ 2026-10-01 9:19 ` Greg Kroah-Hartman
2026-10-01 20:44 ` Alex Elder
0 siblings, 1 reply; 3+ messages in thread
From: Greg Kroah-Hartman @ 2026-10-01 9:19 UTC (permalink / raw)
To: Ethan Nelson-Moore
Cc: Jakub Kicinski, Namjae Jeon, Hisam Mehboob,
Martin Kepplinger-Novaković, greybus-dev, linux-staging,
Agatha Isabelle Moreira, Johan Hovold, Alex Elder
On Mon, Sep 14, 2026 at 07:02:59PM -0700, Ethan Nelson-Moore wrote:
> The Greybus Arche Platform driver depends on the config options
> USB_HSIC_USB3613 or COMPILE_TEST. USB_HSIC_USB3613 has never existed in
> mainline Linux, and COMPILE_TEST is intended to enable the compilation
> of drivers on platforms that can't support them to improve code
> coverage and ease testing of trivial or tree-wide changes. Therefore,
> it is impossible for anyone to be using this driver with unmodified
> mainline kernels. Remove it and move the former maintainer to the
> CREDITS file.
>
> Signed-off-by: Ethan Nelson-Moore <enelsonmoore@gmail.com>
> ---
> Changes in v2: Clarify commit message - mention COMPILE_TEST
>
> CREDITS | 4 +
> MAINTAINERS | 7 -
> drivers/staging/greybus/Kconfig | 9 -
> drivers/staging/greybus/Makefile | 6 -
> drivers/staging/greybus/arche-apb-ctrl.c | 490 -----------------
> drivers/staging/greybus/arche-platform.c | 653 -----------------------
> drivers/staging/greybus/arche_platform.h | 28 -
> 7 files changed, 4 insertions(+), 1193 deletions(-)
> delete mode 100644 drivers/staging/greybus/arche-apb-ctrl.c
> delete mode 100644 drivers/staging/greybus/arche-platform.c
> delete mode 100644 drivers/staging/greybus/arche_platform.h
Yeah, it's time to finally drop this. If it's needed in the future, it
can come back with a simple revert.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2] staging: greybus: remove driver depending on nonexistent config option
2026-10-01 9:19 ` Greg Kroah-Hartman
@ 2026-10-01 20:44 ` Alex Elder
0 siblings, 0 replies; 3+ messages in thread
From: Alex Elder @ 2026-10-01 20:44 UTC (permalink / raw)
To: Greg Kroah-Hartman, Ethan Nelson-Moore
Cc: Jakub Kicinski, Namjae Jeon, Hisam Mehboob,
Martin Kepplinger-Novaković, greybus-dev, linux-staging,
Agatha Isabelle Moreira, Johan Hovold, Alex Elder
On 10/1/26 4:19 AM, Greg Kroah-Hartman wrote:
> On Mon, Sep 14, 2026 at 07:02:59PM -0700, Ethan Nelson-Moore wrote:
>> The Greybus Arche Platform driver depends on the config options
>> USB_HSIC_USB3613 or COMPILE_TEST. USB_HSIC_USB3613 has never existed in
>> mainline Linux, and COMPILE_TEST is intended to enable the compilation
>> of drivers on platforms that can't support them to improve code
>> coverage and ease testing of trivial or tree-wide changes. Therefore,
>> it is impossible for anyone to be using this driver with unmodified
>> mainline kernels. Remove it and move the former maintainer to the
>> CREDITS file.
>>
>> Signed-off-by: Ethan Nelson-Moore <enelsonmoore@gmail.com>
>> ---
>> Changes in v2: Clarify commit message - mention COMPILE_TEST
>>
>> CREDITS | 4 +
>> MAINTAINERS | 7 -
>> drivers/staging/greybus/Kconfig | 9 -
>> drivers/staging/greybus/Makefile | 6 -
>> drivers/staging/greybus/arche-apb-ctrl.c | 490 -----------------
>> drivers/staging/greybus/arche-platform.c | 653 -----------------------
>> drivers/staging/greybus/arche_platform.h | 28 -
>> 7 files changed, 4 insertions(+), 1193 deletions(-)
>> delete mode 100644 drivers/staging/greybus/arche-apb-ctrl.c
>> delete mode 100644 drivers/staging/greybus/arche-platform.c
>> delete mode 100644 drivers/staging/greybus/arche_platform.h
>
> Yeah, it's time to finally drop this. If it's needed in the future, it
> can come back with a simple revert.
Sounds good.
Acked-by: Alex Elder <elder@riscstar.com>
>
> thanks,
>
> greg k-h
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-01 20:44 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-15 2:02 [PATCH v2] staging: greybus: remove driver depending on nonexistent config option Ethan Nelson-Moore
2026-10-01 9:19 ` Greg Kroah-Hartman
2026-10-01 20:44 ` Alex Elder
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox