Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package xone for openSUSE:Factory checked in 
at 2026-02-16 13:09:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xone (Old)
 and      /work/SRC/openSUSE:Factory/.xone.new.1977 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "xone"

Mon Feb 16 13:09:14 2026 rev:3 rq:1333055 version:0.5.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/xone/xone.changes        2026-02-01 
22:04:46.366951150 +0100
+++ /work/SRC/openSUSE:Factory/.xone.new.1977/xone.changes      2026-02-16 
13:14:44.699560717 +0100
@@ -1,0 +2,6 @@
+Sun Feb  8 07:47:39 UTC 2026 - Aesara Binder <[email protected]>
+
+- Update to release 0.5.5
+  * Add sysfs interface to power off wireless controllers 
+
+-------------------------------------------------------------------

Old:
----
  v0.5.4.tar.gz

New:
----
  v0.5.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ xone.spec ++++++
--- /var/tmp/diff_new_pack.S3KpcJ/_old  2026-02-16 13:14:45.495593761 +0100
+++ /var/tmp/diff_new_pack.S3KpcJ/_new  2026-02-16 13:14:45.499593927 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           xone
-Version:        0.5.4
+Version:        0.5.5
 Release:        0
 Summary:        Driver for Xbox One and Xbox Series X|S controllers
 License:        GPL-2.0-or-later
@@ -28,8 +28,9 @@
 BuildRequires:  %kernel_module_package_buildreqs
 BuildRequires:  systemd-rpm-macros
 BuildRequires:  xz
-Requires:       xone-dongle-firmware >= 0+git20251208.d8be599
-Requires:       xone-kmp
+Requires:       xone-dongle-firmware
+Conflicts:      xone-dongle-firmware >= 0.1
+Requires:       xone-kmp = %{version}
 
 %kernel_module_package -n %name -p %_sourcedir/preamble
 

++++++ v0.5.4.tar.gz -> v0.5.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xone-0.5.4/transport/dongle.c 
new/xone-0.5.5/transport/dongle.c
--- old/xone-0.5.4/transport/dongle.c   2026-01-26 00:47:09.000000000 +0100
+++ new/xone-0.5.5/transport/dongle.c   2026-02-05 13:22:01.000000000 +0100
@@ -107,6 +107,9 @@
        u16 product;
 };
 
+static int xone_dongle_power_off_client(struct xone_dongle *dongle, int index);
+static int xone_dongle_power_off_clients(struct xone_dongle *dongle);
+
 static void xone_dongle_prep_packet(struct xone_dongle_client *client,
                                    struct sk_buff *skb,
                                    enum xone_dongle_queue queue)
@@ -285,9 +288,8 @@
                        __func__, err);
 }
 
-static ssize_t xone_dongle_pairing_show(struct device *dev,
-                                       struct device_attribute *attr,
-                                       char *buf)
+static ssize_t pairing_show(struct device *dev, struct device_attribute *attr,
+                           char *buf)
 {
        struct usb_interface *intf = to_usb_interface(dev);
        struct xone_dongle *dongle = usb_get_intfdata(intf);
@@ -295,9 +297,8 @@
        return sysfs_emit(buf, "%d\n", dongle->pairing);
 }
 
-static ssize_t xone_dongle_pairing_store(struct device *dev,
-                                        struct device_attribute *attr,
-                                        const char *buf, size_t count)
+static ssize_t pairing_store(struct device *dev, struct device_attribute *attr,
+                            const char *buf, size_t count)
 {
        struct usb_interface *intf = to_usb_interface(dev);
        struct xone_dongle *dongle = usb_get_intfdata(intf);
@@ -315,13 +316,57 @@
        return count;
 }
 
-static struct device_attribute xone_dongle_attr_pairing =
-       __ATTR(pairing, 0644,
-              xone_dongle_pairing_show,
-              xone_dongle_pairing_store);
+static ssize_t active_clients_show(struct device *dev,
+                                  struct device_attribute *attr, char *buf)
+{
+       struct usb_interface *intf = to_usb_interface(dev);
+       struct xone_dongle *dongle = usb_get_intfdata(intf);
+
+       return sysfs_emit(buf, "%u\n", atomic_read(&dongle->client_count));
+}
+
+static ssize_t poweroff_show(struct device *dev, struct device_attribute *attr,
+                            char *buf)
+{
+       return sysfs_emit(buf, "%s\n%s\n%s\n",
+                         "To power off clients please write:",
+                         "0-15 -> client with given index",
+                         "-1   -> all clients");
+}
+
+static ssize_t poweroff_store(struct device *dev, struct device_attribute 
*attr,
+                             const char *buf, size_t count)
+{
+       struct usb_interface *intf = to_usb_interface(dev);
+       struct xone_dongle *dongle = usb_get_intfdata(intf);
+       int err, val;
+
+       if (count > 3)
+               return -E2BIG;
+
+       if (dongle->fw_state != XONE_DONGLE_FW_STATE_READY)
+               return -ENODEV;
+
+       err = kstrtoint(buf, 10, &val);
+       if (err)
+               return err;
+
+       if (val == -1)
+               err = xone_dongle_power_off_clients(dongle);
+       else
+               err = xone_dongle_power_off_client(dongle, val);
+
+       return err ? err : count;
+}
+
+DEVICE_ATTR_RW(pairing);
+DEVICE_ATTR_RO(active_clients);
+DEVICE_ATTR_RW(poweroff);
 
 static struct attribute *xone_dongle_attrs[] = {
-       &xone_dongle_attr_pairing.attr,
+       &dev_attr_pairing.attr,
+       &dev_attr_active_clients.attr,
+       &dev_attr_poweroff.attr,
        NULL,
 };
 ATTRIBUTE_GROUPS(xone_dongle);
@@ -991,32 +1036,35 @@
        return 0;
 }
 
-static int xone_dongle_power_off_clients(struct xone_dongle *dongle)
+static int xone_dongle_power_off_client(struct xone_dongle *dongle, int index)
 {
-       struct xone_dongle_client *client;
-       int i;
+       unsigned long flags = 0;
        int err = 0;
-       unsigned long flags;
 
-       if (dongle->fw_state != XONE_DONGLE_FW_STATE_READY)
-               return 0;
+       if (index < 0 || index >= XONE_DONGLE_MAX_CLIENTS)
+               return -EINVAL;
 
        spin_lock_irqsave(&dongle->clients_lock, flags);
 
-       for (i = 0; i < XONE_DONGLE_MAX_CLIENTS; i++) {
-               client = dongle->clients[i];
-               if (!client)
-                       continue;
-
-               err = gip_power_off_adapter(client->adapter);
-               if (err)
-                       break;
-       }
+       if (dongle->clients[index])
+               err = gip_power_off_adapter(dongle->clients[index]->adapter);
 
        spin_unlock_irqrestore(&dongle->clients_lock, flags);
+       return err;
+}
 
-       if (err)
-               return err;
+static int xone_dongle_power_off_clients(struct xone_dongle *dongle)
+{
+       int err;
+
+       if (dongle->fw_state != XONE_DONGLE_FW_STATE_READY)
+               return 0;
+
+       for (int i = 0; i < XONE_DONGLE_MAX_CLIENTS; i++){
+               err = xone_dongle_power_off_client(dongle, i);
+               if (err)
+                       return err;
+       }
 
        /* can time out if new client connects */
        if (!wait_event_timeout(dongle->disconnect_wait,
@@ -1181,8 +1229,6 @@
 
        msleep(1000);
        return xone_mt76_resume_radio(&dongle->mt);
-       msleep(500);
-       return xone_mt76_resume_radio(&dongle->mt);
 }
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(6, 11, 0)

Reply via email to