Update source to Armbian-dev-202610.A311Y3

This commit is contained in:
2026-11-11 08:50:43 +08:00
parent 3428a94f6b
commit f459ef6a9e
12514 changed files with 2264376 additions and 468481 deletions
@@ -72,6 +72,11 @@ static ssize_t direction_show(struct device *dev,
struct gpio_desc *desc = data->desc;
ssize_t status;
if (!data->desc)
return -EINVAL;
desc = data->desc;
mutex_lock(&data->mutex);
gpiod_get_direction(desc);
@@ -129,15 +134,20 @@ static ssize_t value_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t size)
{
struct gpiod_data *data = dev_get_drvdata(dev);
struct gpio_desc *desc = data->desc;
struct gpio_desc *desc;
ssize_t status = 0;
if (!data->desc)
return -EINVAL;
desc = data->desc;
mutex_lock(&data->mutex);
if (!test_bit(FLAG_IS_OUT, &desc->flags)) {
status = -EPERM;
} else {
long value;
long value = 0;
if (size <= 2 && isdigit(buf[0]) &&
(size == 1 || buf[1] == '\n'))
@@ -169,10 +179,18 @@ static irqreturn_t gpio_sysfs_irq(int irq, void *priv)
static int gpio_sysfs_request_irq(struct device *dev, unsigned char flags)
{
struct gpiod_data *data = dev_get_drvdata(dev);
struct gpio_desc *desc = data->desc;
struct gpio_desc *desc;
unsigned long irq_flags;
int ret;
if (!data->desc)
return -EINVAL;
desc = data->desc;
if (!desc->gdev || !desc->gdev->chip)
return -ENODEV;
data->irq = gpiod_to_irq(desc);
if (data->irq < 0)
return -EIO;
@@ -225,7 +243,14 @@ err_put_kn:
static void gpio_sysfs_free_irq(struct device *dev)
{
struct gpiod_data *data = dev_get_drvdata(dev);
struct gpio_desc *desc = data->desc;
struct gpio_desc *desc;
if (!data->desc)
return;
desc = data->desc;
if (!desc->gdev || !desc->gdev->chip)
return;
data->irq_flags = 0;
free_irq(data->irq, data);
@@ -309,10 +334,15 @@ static DEVICE_ATTR_RW(edge);
static int gpio_sysfs_set_active_low(struct device *dev, int value)
{
struct gpiod_data *data = dev_get_drvdata(dev);
struct gpio_desc *desc = data->desc;
struct gpio_desc *desc;
int status = 0;
unsigned int flags = data->irq_flags;
if (!data->desc)
return -EINVAL;
desc = data->desc;
if (!!test_bit(FLAG_ACTIVE_LOW, &desc->flags) == !!value)
return 0;
@@ -332,9 +362,14 @@ static ssize_t active_low_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct gpiod_data *data = dev_get_drvdata(dev);
struct gpio_desc *desc = data->desc;
struct gpio_desc *desc;
ssize_t status;
if (!data->desc)
return -EINVAL;
desc = data->desc;
mutex_lock(&data->mutex);
status = sysfs_emit(buf, "%d\n",
@@ -350,7 +385,7 @@ static ssize_t active_low_store(struct device *dev,
{
struct gpiod_data *data = dev_get_drvdata(dev);
ssize_t status;
long value;
long value = 0;
mutex_lock(&data->mutex);
@@ -369,10 +404,15 @@ static umode_t gpio_is_visible(struct kobject *kobj, struct attribute *attr,
{
struct device *dev = kobj_to_dev(kobj);
struct gpiod_data *data = dev_get_drvdata(dev);
struct gpio_desc *desc = data->desc;
struct gpio_desc *desc;
umode_t mode = attr->mode;
bool show_direction = data->direction_can_change;
if (!data->desc)
return 0;
desc = data->desc;
if (attr == &dev_attr_direction.attr) {
if (!show_direction)
mode = 0;
@@ -456,7 +496,7 @@ static ssize_t export_store(const struct class *class,
const struct class_attribute *attr,
const char *buf, size_t len)
{
long gpio;
long gpio = 0;
struct gpio_desc *desc;
int status;
struct gpio_chip *gc;
@@ -468,7 +508,7 @@ static ssize_t export_store(const struct class *class,
desc = gpio_to_desc(gpio);
/* reject invalid GPIOs */
if (!desc) {
if (!desc || !desc->gdev || !desc->gdev->chip) {
pr_warn("%s: invalid GPIO %ld\n", __func__, gpio);
return -EINVAL;
}
@@ -508,7 +548,7 @@ static ssize_t unexport_store(const struct class *class,
const struct class_attribute *attr,
const char *buf, size_t len)
{
long gpio;
long gpio = 0;
struct gpio_desc *desc;
int status;
@@ -590,6 +630,9 @@ static int gpiod_sysfs_export(struct gpio_desc *desc, bool direction_may_change)
return -EINVAL;
}
if (!desc->gdev || !desc->gdev->chip)
return -EINVAL;
gdev = desc->gdev;
chip = gdev->chip;
@@ -714,7 +757,7 @@ int gpiochip_sysfs_register(struct gpio_device *gdev)
* register later, in gpiolib_sysfs_init() ... here we just
* verify that _some_ field of gpio_class got initialized.
*/
if (!class_is_registered(&gpio_class))
if (!class_is_registered(&gpio_class) || !chip)
return 0;
/*
@@ -747,7 +790,7 @@ static void __maybe_unused gpiochip_sysfs_unregister(struct gpio_device *gdev)
struct gpio_chip *chip = gdev->chip;
unsigned int i;
if (!gdev->mockdev)
if (!gdev->mockdev || !gdev->descs || !chip)
return;
device_unregister(gdev->mockdev);