temp/upower: drop torch patches (MR 2429)

With Phosh 0.13.0, Logind is used without patches for the torch
as UPower doesn't want to handle this. Therefore, we can drop
the torch patches to UPower.

[ci:skip-build] already built successfully in CI
This commit is contained in:
Dylan Van Assche 2021-08-11 19:11:25 +02:00 committed by Clayton Craft
parent c4fc7c9ed0
commit 23ee2f2dd3
No known key found for this signature in database
GPG key ID: 7A3461CA187CEA54
5 changed files with 6 additions and 811 deletions

View file

@ -1,769 +0,0 @@
From 1cfb72f33ade965ca769721b9e248ca916482cef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Guido=20G=C3=BCnther?= <agx@sigxcpu.org>
Date: Sat, 26 Sep 2020 12:19:50 +0200
Subject: [PATCH] Add torch support
This is modeled like KbdBacklight.
Taken from: https://gitlab.freedesktop.org/upower/upower/-/merge_requests/50
---
dbus/Makefile.am | 11 +
dbus/org.freedesktop.UPower.Torch.xml | 148 ++++++++++
doc/Makefile.am | 9 +-
src/Makefile.am | 4 +-
src/org.freedesktop.UPower.conf.in | 4 +
src/up-main.c | 5 +
src/up-torch.c | 388 ++++++++++++++++++++++++++
src/up-torch.h | 40 +++
8 files changed, 607 insertions(+), 2 deletions(-)
create mode 100644 dbus/org.freedesktop.UPower.Torch.xml
create mode 100644 src/up-torch.c
create mode 100644 src/up-torch.h
diff --git a/dbus/Makefile.am b/dbus/Makefile.am
index 017c7eb..264761c 100644
--- a/dbus/Makefile.am
+++ b/dbus/Makefile.am
@@ -17,6 +17,8 @@ BUILT_SOURCES = \
up-device-generated.c \
up-kbd-backlight-generated.h \
up-kbd-backlight-generated.c \
+ up-torch-generated.h \
+ up-torch-generated.c \
up-wakeups-generated.h \
up-wakeups-generated.c
@@ -46,6 +48,14 @@ up-kbd-backlight-generated.h: org.freedesktop.UPower.KbdBacklight.xml Makefile.a
$(srcdir)/org.freedesktop.UPower.KbdBacklight.xml
up-kbd-backlight-generated.c: up-kbd-backlight-generated.h
+up-torch-generated.h: org.freedesktop.UPower.Torch.xml Makefile.am
+ $(AM_V_GEN) gdbus-codegen --interface-prefix org.freedesktop.UPower.Torch. \
+ --generate-c-code up-torch-generated \
+ --c-namespace Up \
+ --annotate "org.freedesktop.UPower.Torch" "org.gtk.GDBus.C.Name" ExportedTorch \
+ $(srcdir)/org.freedesktop.UPower.Torch.xml
+up-torch-generated.c: up-torch-generated.h
+
up-wakeups-generated.h: org.freedesktop.UPower.Wakeups.xml Makefile.am
$(AM_V_GEN) gdbus-codegen --interface-prefix org.freedesktop.UPower.Wakeups. \
--generate-c-code up-wakeups-generated \
@@ -59,6 +69,7 @@ dist_dbusif_DATA = \
org.freedesktop.UPower.xml \
org.freedesktop.UPower.Device.xml \
org.freedesktop.UPower.KbdBacklight.xml \
+ org.freedesktop.UPower.Torch.xml \
org.freedesktop.UPower.Wakeups.xml
-include $(top_srcdir)/git.mk
diff --git a/dbus/org.freedesktop.UPower.Torch.xml b/dbus/org.freedesktop.UPower.Torch.xml
new file mode 100644
index 0000000..4f7bfd9
--- /dev/null
+++ b/dbus/org.freedesktop.UPower.Torch.xml
@@ -0,0 +1,148 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd" [
+ <!ENTITY ERROR_GENERAL "org.freedesktop.UPower.GeneralError">
+]>
+<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
+ <interface name="org.freedesktop.UPower.Torch">
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ org.freedesktop.UPower.Torch is a DBus interface implemented
+ by UPower.
+ It allows a torch (if present) to be controlled.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+
+ <!-- ************************************************************ -->
+ <method name="GetMaxBrightness">
+ <arg name="value" direction="out" type="i">
+ <doc:doc>
+ <doc:summary>
+ The maximum value of the torch brightness.
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Get the maximum brightness level for the torch.
+ </doc:para>
+ </doc:description>
+ <doc:errors>
+ <doc:error name="&ERROR_GENERAL;">if an error occured while getting the maximum brightness</doc:error>
+ </doc:errors>
+ </doc:doc>
+ </method>
+
+ <!-- ************************************************************ -->
+ <method name="GetBrightness">
+ <arg name="value" direction="out" type="i">
+ <doc:doc>
+ <doc:summary>
+ The current value of the torch brightness.
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Get the brightness level of the torch.
+ </doc:para>
+ </doc:description>
+ <doc:errors>
+ <doc:error name="&ERROR_GENERAL;">if an error occured while getting the brightness</doc:error>
+ </doc:errors>
+ </doc:doc>
+ </method>
+
+ <!-- ************************************************************ -->
+ <method name="SetBrightness">
+ <arg name="value" direction="in" type="i">
+ <doc:doc>
+ <doc:summary>
+ The value to set the torch brightness.
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Set the brightness level of the torch.
+ </doc:para>
+ </doc:description>
+ <doc:errors>
+ <doc:error name="&ERROR_GENERAL;">if an error occured while setting the brightness</doc:error>
+ </doc:errors>
+ </doc:doc>
+ </method>
+
+ <!-- ************************************************************ -->
+ <signal name="BrightnessChanged">
+ <arg name="value" direction="out" type="i">
+ <doc:doc>
+ <doc:summary>
+ The new brightness value of the torch.
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ The torch brightness level has changed.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ </signal>
+
+ <signal name="BrightnessChangedWithSource">
+ <arg name="value" direction="out" type="i">
+ <doc:doc>
+ <doc:summary>
+ The new brightness value of the torch.
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg name="source" direction="out" type="s">
+ <doc:doc>
+ <doc:summary>
+ Source of the torch brightness change, either
+ "external" if SetBrightness was called, or "internal" if the
+ hardware changed the keyboard brightness itself.
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ The torch brightness level has changed including
+ information about the source of the change.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ </signal>
+ <!-- ************************************************************ -->
+ <property name="MaxBrightness" type="i" access="read">
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ The maximum value of the torch brightness.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ </property>
+
+ <property name="Brightness" type="i" access="read">
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ The current value of the torch brightness.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ </property>
+
+ </interface>
+
+</node>
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 2c20415..718c057 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -65,6 +65,11 @@ org.freedesktop.UPower.KbdBacklight.ref.xml : $(top_srcdir)/dbus/org.freedesktop
echo "<?xml version=\"1.0\"?>""<!DOCTYPE refentry PUBLIC \"-//OASIS//DTD DocBook XML V4.1.2//EN\" \"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd\">" > $@
$(XSLTPROC) $(top_srcdir)/doc/spec-to-docbook.xsl $< | tail -n +2 >> $@
+org.freedesktop.UPower.Torch.ref.xml : $(top_srcdir)/dbus/org.freedesktop.UPower.Torch.xml $(top_srcdir)/doc/spec-to-docbook.xsl
+ if $(AM_V_P); then set -x; else echo " GEN $@"; fi
+ echo "<?xml version=\"1.0\"?>""<!DOCTYPE refentry PUBLIC \"-//OASIS//DTD DocBook XML V4.1.2//EN\" \"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd\">" > $@
+ $(XSLTPROC) $(top_srcdir)/doc/spec-to-docbook.xsl $< | tail -n +2 >> $@
+
org.freedesktop.UPower.Wakeups.ref.xml : $(top_srcdir)/dbus/org.freedesktop.UPower.Wakeups.xml $(top_srcdir)/doc/spec-to-docbook.xsl
if $(AM_V_P); then set -x; else echo " GEN $@"; fi
echo "<?xml version=\"1.0\"?>""<!DOCTYPE refentry PUBLIC \"-//OASIS//DTD DocBook XML V4.1.2//EN\" \"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd\">" > $@
@@ -75,7 +80,8 @@ EXTRA_DIST = spec-to-docbook.xsl dbus-introspect-docs.dtd
BUILT_SOURCES = \
org.freedesktop.UPower.ref.xml \
org.freedesktop.UPower.Device.ref.xml \
- org.freedesktop.UPower.KbdBacklight.ref.xml
+ org.freedesktop.UPower.KbdBacklight.ref.xml \
+ org.freedesktop.UPower.Torch.ref.xml
# Non-autogenerated SGML files to be included in $(DOC_MAIN_SGML_FILE)
content_files = \
@@ -102,6 +108,7 @@ MAINTAINERCLEANFILES = \
DISTCLEANFILES = \
org.freedesktop.UPower.Device.ref.xml \
org.freedesktop.UPower.KbdBacklight.ref.xml \
+ org.freedesktop.UPower.Torch.ref.xml \
org.freedesktop.UPower.ref.xml \
upowerd.xml \
upower.xml \
diff --git a/src/Makefile.am b/src/Makefile.am
index 3400139..f022efb 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -60,7 +60,9 @@ upowerd_SOURCES = \
up-backend.h \
up-native.h \
up-main.c \
- up-backend-bsd-private.h \
+ up-torch.h \
+ up-torch.c \
+ up-backend-bsd-private.h \
$(BUILT_SOURCES)
upowerd_CPPFLAGS = \
diff --git a/src/org.freedesktop.UPower.conf.in b/src/org.freedesktop.UPower.conf.in
index 5a6c660..ef60549 100644
--- a/src/org.freedesktop.UPower.conf.in
+++ b/src/org.freedesktop.UPower.conf.in
@@ -21,6 +21,8 @@
send_interface="org.freedesktop.DBus.Properties"/>
<allow send_destination="org.freedesktop.UPower.KbdBacklight"
send_interface="org.freedesktop.DBus.Properties"/>
+ <allow send_destination="org.freedesktop.UPower.Torch"
+ send_interface="org.freedesktop.DBus.Properties"/>
<allow send_destination="org.freedesktop.UPower.Wakeups"
send_interface="org.freedesktop.DBus.Properties"/>
@@ -28,6 +30,8 @@
send_interface="org.freedesktop.UPower"/>
<allow send_destination="org.freedesktop.UPower"
send_interface="org.freedesktop.UPower.Device"/>
+ <allow send_destination="org.freedesktop.UPower"
+ send_interface="org.freedesktop.UPower.Torch"/>
<allow send_destination="org.freedesktop.UPower"
send_interface="org.freedesktop.UPower.KbdBacklight"/>
<allow send_destination="org.freedesktop.UPower"
diff --git a/src/up-main.c b/src/up-main.c
index 0619c50..f9ebaae 100644
--- a/src/up-main.c
+++ b/src/up-main.c
@@ -38,12 +38,14 @@
#include "up-daemon.h"
#include "up-kbd-backlight.h"
+#include "up-torch.h"
#include "up-wakeups.h"
#define DEVKIT_POWER_SERVICE_NAME "org.freedesktop.UPower"
typedef struct UpState {
UpKbdBacklight *kbd_backlight;
+ UpTorch *torch;
UpWakeups *wakeups;
UpDaemon *daemon;
GMainLoop *loop;
@@ -55,6 +57,7 @@ up_state_free (UpState *state)
up_daemon_shutdown (state->daemon);
g_clear_object (&state->kbd_backlight);
+ g_clear_object (&state->torch);
g_clear_object (&state->wakeups);
g_clear_object (&state->daemon);
g_clear_pointer (&state->loop, g_main_loop_unref);
@@ -68,6 +71,7 @@ up_state_new (void)
UpState *state = g_new0 (UpState, 1);
state->kbd_backlight = up_kbd_backlight_new ();
+ state->torch = up_torch_new ();
state->wakeups = up_wakeups_new ();
state->daemon = up_daemon_new ();
state->loop = g_main_loop_new (NULL, FALSE);
@@ -86,6 +90,7 @@ up_main_bus_acquired (GDBusConnection *connection,
UpState *state = user_data;
up_kbd_backlight_register (state->kbd_backlight, connection);
+ up_torch_register (state->torch, connection);
up_wakeups_register (state->wakeups, connection);
if (!up_daemon_startup (state->daemon, connection)) {
g_warning ("Could not startup; bailing out");
diff --git a/src/up-torch.c b/src/up-torch.c
new file mode 100644
index 0000000..8705041
--- /dev/null
+++ b/src/up-torch.c
@@ -0,0 +1,388 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2020 Guido Günther <agx@sigxcpu.org>
+ * 2008 Richard Hughes <richard@hughsie.com>
+ * 2010 Alex Murray <murray.alex@gmail.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <dirent.h>
+#include <errno.h>
+
+#include "up-torch.h"
+#include "up-daemon.h"
+#include "up-types.h"
+
+static void up_torch_finalize (GObject *object);
+
+struct _UpTorch
+{
+ UpExportedTorchSkeleton parent;
+
+ gint fd;
+ gint fd_hw_changed;
+ GIOChannel *channel_hw_changed;
+ gint max_brightness;
+};
+
+G_DEFINE_TYPE (UpTorch, up_torch, UP_TYPE_EXPORTED_TORCH_SKELETON)
+
+/**
+ * up_torch_emit_change:
+ **/
+static void
+up_torch_emit_change(UpTorch *torch, int value, const char *source)
+{
+ g_object_set (torch, "brightness", value, NULL);
+ up_exported_torch_emit_brightness_changed (UP_EXPORTED_TORCH (torch), value);
+ up_exported_torch_emit_brightness_changed_with_source (UP_EXPORTED_TORCH (torch), value, source);
+}
+
+/**
+ * up_torch_brightness_read:
+ **/
+static gint
+up_torch_brightness_read (UpTorch *torch, int fd)
+{
+ gchar buf[16];
+ gchar *end = NULL;
+ ssize_t len;
+ gint64 brightness = -1;
+
+ g_return_val_if_fail (fd >= 0, brightness);
+
+ lseek (fd, 0, SEEK_SET);
+ len = read (fd, buf, G_N_ELEMENTS (buf) - 1);
+
+ if (len > 0) {
+ buf[len] = '\0';
+ brightness = g_ascii_strtoll (buf, &end, 10);
+
+ if (brightness < 0 ||
+ brightness > torch->max_brightness ||
+ end == buf) {
+ brightness = -1;
+ g_warning ("failed to convert brightness: %s", buf);
+ }
+ }
+
+ g_object_set (torch, "brightness", brightness, NULL);
+ return brightness;
+}
+
+/**
+ * up_torch_brightness_write:
+ **/
+static gboolean
+up_torch_brightness_write (UpTorch *torch, gint value)
+{
+ g_autofree gchar *text = NULL;
+ gint retval;
+ gint length;
+ gboolean ret = TRUE;
+
+ /* write new values to backlight */
+ if (torch->fd < 0) {
+ g_warning ("cannot write to torch as file not open");
+ return FALSE;
+ }
+
+ /* limit to between 0 and max */
+ value = CLAMP (value, 0, torch->max_brightness);
+
+ /* convert to text */
+ text = g_strdup_printf ("%i", value);
+ length = strlen (text);
+
+ /* write to file */
+ lseek (torch->fd, 0, SEEK_SET);
+ retval = write (torch->fd, text, length);
+ if (retval != length) {
+ g_warning ("writing '%s' to device failed", text);
+ return FALSE;
+ }
+
+ /* emit signal */
+ up_torch_emit_change (torch, value, "external");
+
+ return ret;
+}
+
+/**
+ * up_torch_get_brightness:
+ *
+ * Gets the current brightness
+ **/
+static gboolean
+up_torch_get_brightness (UpExportedTorch *skeleton,
+ GDBusMethodInvocation *invocation,
+ UpTorch *torch)
+{
+ gint brightness;
+
+ brightness = up_torch_brightness_read (torch, torch->fd);
+
+ if (brightness >= 0) {
+ up_exported_torch_complete_get_brightness (skeleton, invocation,
+ brightness);
+ } else {
+ g_dbus_method_invocation_return_error (invocation,
+ UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL,
+ "error reading brightness");
+ }
+
+ return TRUE;
+}
+
+/**
+ * up_torch_get_max_brightness:
+ *
+ * Gets the max brightness
+ **/
+static gboolean
+up_torch_get_max_brightness (UpExportedTorch *skeleton,
+ GDBusMethodInvocation *invocation,
+ UpTorch *torch)
+{
+ up_exported_torch_complete_get_max_brightness (skeleton, invocation,
+ torch->max_brightness);
+ return TRUE;
+}
+
+/**
+ * up_torch_set_brightness:
+ **/
+static gboolean
+up_torch_set_brightness (UpExportedTorch *skeleton,
+ GDBusMethodInvocation *invocation,
+ gint value,
+ UpTorch *torch)
+{
+ gboolean ret = FALSE;
+
+ g_debug ("setting brightness to %i", value);
+ ret = up_torch_brightness_write (torch, value);
+
+ if (ret) {
+ up_exported_torch_complete_set_brightness (skeleton, invocation);
+ } else {
+ g_dbus_method_invocation_return_error (invocation,
+ UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL,
+ "error writing brightness %d", value);
+ }
+
+ return TRUE;
+}
+
+/**
+ * up_torch_class_init:
+ **/
+static void
+up_torch_class_init (UpTorchClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = up_torch_finalize;
+}
+
+/**
+ * up_torch_event_io:
+ **/
+static gboolean
+up_torch_event_io (GIOChannel *channel, GIOCondition condition, gpointer data)
+{
+ UpTorch *torch = (UpTorch*) data;
+ gint brightness;
+
+ if (!(condition & G_IO_PRI))
+ return FALSE;
+
+ brightness = up_torch_brightness_read (torch, torch->fd_hw_changed);
+ if (brightness < 0 && errno == ENODEV)
+ return FALSE;
+
+ if (brightness >= 0)
+ up_torch_emit_change (torch, brightness, "internal");
+
+ return TRUE;
+}
+
+/**
+ * up_torch_find:
+ **/
+static gboolean
+up_torch_find (UpTorch *torch)
+{
+ gboolean ret;
+ gboolean found = FALSE;
+ GDir *dir;
+ const gchar *filename;
+ gchar *end = NULL;
+ g_autofree gchar *dir_path = NULL;
+ g_autofree gchar *path_max = NULL;
+ g_autofree gchar *path_now = NULL;
+ g_autofree gchar *path_hw_changed = NULL;
+ g_autofree gchar *buf_max = NULL;
+ g_autofree gchar *buf_now = NULL;
+ GError *error = NULL;
+
+ torch->fd = -1;
+
+ /* open directory */
+ dir = g_dir_open ("/sys/class/leds", 0, &error);
+ if (dir == NULL) {
+ if (!g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
+ g_warning ("failed to open directory: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ /* find a led device that is a torch */
+ while ((filename = g_dir_read_name (dir)) != NULL) {
+ if (g_strstr_len (filename, -1, "torch") != NULL ||
+ g_strstr_len (filename, -1, "flash") != NULL) {
+ dir_path = g_build_filename ("/sys/class/leds",
+ filename, NULL);
+ break;
+ }
+ }
+
+ /* nothing found */
+ if (dir_path == NULL)
+ goto out;
+
+ /* read max brightness */
+ path_max = g_build_filename (dir_path, "max_brightness", NULL);
+ ret = g_file_get_contents (path_max, &buf_max, NULL, &error);
+ if (!ret) {
+ g_warning ("failed to get max brightness: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+ torch->max_brightness = g_ascii_strtoull (buf_max, &end, 10);
+ if (torch->max_brightness == 0 && end == buf_max) {
+ g_warning ("failed to convert max brightness: %s", buf_max);
+ goto out;
+ }
+ g_object_set (torch, "max-brightness", torch->max_brightness, NULL);
+
+ /* open the brightness file for read and write operations */
+ path_now = g_build_filename (dir_path, "brightness", NULL);
+ torch->fd = open (path_now, O_RDWR);
+
+ /* read brightness and check if it has an acceptable value */
+ if (up_torch_brightness_read (torch, torch->fd) < 0)
+ goto out;
+
+ path_hw_changed = g_build_filename (dir_path, "brightness_hw_changed", NULL);
+ torch->fd_hw_changed = open (path_hw_changed, O_RDONLY);
+ if (torch->fd_hw_changed >= 0) {
+ torch->channel_hw_changed = g_io_channel_unix_new (torch->fd_hw_changed);
+ g_io_add_watch (torch->channel_hw_changed,
+ G_IO_PRI, up_torch_event_io, torch);
+ }
+
+ /* success */
+ found = TRUE;
+out:
+ if (dir != NULL)
+ g_dir_close (dir);
+ return found;
+}
+
+/**
+ * up_torch_init:
+ **/
+static void
+up_torch_init (UpTorch *torch)
+{
+ g_signal_connect (torch, "handle-get-brightness",
+ G_CALLBACK (up_torch_get_brightness), torch);
+ g_signal_connect (torch, "handle-get-max-brightness",
+ G_CALLBACK (up_torch_get_max_brightness), torch);
+ g_signal_connect (torch, "handle-set-brightness",
+ G_CALLBACK (up_torch_set_brightness), torch);
+}
+
+/**
+ * up_torch_finalize:
+ **/
+static void
+up_torch_finalize (GObject *object)
+{
+ UpTorch *torch;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (UP_IS_TORCH (object));
+
+ torch = UP_TORCH (object);
+
+ if (torch->channel_hw_changed) {
+ g_io_channel_shutdown (torch->channel_hw_changed, FALSE, NULL);
+ g_io_channel_unref (torch->channel_hw_changed);
+ }
+
+ if (torch->fd_hw_changed >= 0)
+ close (torch->fd_hw_changed);
+
+ /* close file */
+ if (torch->fd >= 0)
+ close (torch->fd);
+
+ G_OBJECT_CLASS (up_torch_parent_class)->finalize (object);
+}
+
+/**
+ * up_torch_new:
+ **/
+UpTorch *
+up_torch_new (void)
+{
+ return g_object_new (UP_TYPE_TORCH, NULL);
+}
+
+void
+up_torch_register (UpTorch *torch,
+ GDBusConnection *connection)
+{
+ g_autoptr(GError) error = NULL;
+
+ /* find a kbd backlight in sysfs */
+ if (!up_torch_find (torch)) {
+ g_debug ("cannot find a torch");
+ return;
+ }
+
+ g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (torch),
+ connection,
+ "/org/freedesktop/UPower/Torch",
+ &error);
+
+ if (error != NULL) {
+ g_warning ("Cannot export Torch object to bus: %s", error->message);
+ }
+}
diff --git a/src/up-torch.h b/src/up-torch.h
new file mode 100644
index 0000000..e84c9f5
--- /dev/null
+++ b/src/up-torch.h
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Richard Hughes <richard@hughsie.com>
+ * 2010 Alex Murray <murray.alex@gmail.com>
+ * 2010 Alex Murray <murray.alex@gmail.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef __UP_TORCH_H
+#define __UP_TORCH_H
+
+#include <dbus/up-torch-generated.h>
+
+G_BEGIN_DECLS
+
+#define UP_TYPE_TORCH (up_torch_get_type ())
+G_DECLARE_FINAL_TYPE (UpTorch, up_torch, UP, TORCH, UpExportedTorchSkeleton);
+
+UpTorch *up_torch_new (void);
+void up_torch_register (UpTorch *torch,
+ GDBusConnection *connection);
+
+G_END_DECLS
+
+#endif /* __UP_TORCH_H */
--
2.20.1

View file

@ -1,32 +0,0 @@
From f15355f16e8b3dc50c2f0e9c078a55d4224477ff Mon Sep 17 00:00:00 2001
From: Clayton Craft <clayton@craftyguy.net>
Date: Wed, 24 Feb 2021 17:04:17 -0800
Subject: [PATCH] torch: be more specific when searching for an led device
The previous implementation of this caused upower to select a thing
callsed 'flash_strobe' in the L5, which doesn't operate like a
flashlight. This changes the detection logic to look at the suffix, on
the pinephone the device ends in ':flash', and on the L5 it ends in
':torch'.
---
src/up-torch.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/up-torch.c b/src/up-torch.c
index 8705041..554d197 100644
--- a/src/up-torch.c
+++ b/src/up-torch.c
@@ -263,8 +263,8 @@ up_torch_find (UpTorch *torch)
/* find a led device that is a torch */
while ((filename = g_dir_read_name (dir)) != NULL) {
- if (g_strstr_len (filename, -1, "torch") != NULL ||
- g_strstr_len (filename, -1, "flash") != NULL) {
+ if (g_str_has_suffix(filename, ":torch") ||
+ g_str_has_suffix(filename, ":flash")) {
dir_path = g_build_filename ("/sys/class/leds",
filename, NULL);
break;
--
2.30.1

View file

@ -4,21 +4,19 @@ pkgname=upower
pkgver=9999
_pkgver=0.99.11
_distver="UPOWER_${_pkgver//./_}"
pkgrel=3
pkgrel=4
pkgdesc="Power Management Services"
url="https://upower.freedesktop.org"
arch="aarch64 armv7"
license="GPL-2.0-or-later"
subpackages="$pkgname-dev $pkgname-lang"
makedepends="linux-headers gtk+-dev libgudev-dev libusb-dev polkit-dev gtk-doc
makedepends="linux-headers gtk+-dev libgudev-dev libusb-dev polkit-elogind-dev gtk-doc
dbus-glib-dev libxslt gobject-introspection-dev docbook-xsl autoconf automake"
checkdepends="py3-dbus py3-gobject3"
options="!check" # need unpackaged umockdev
source="https://gitlab.freedesktop.org/upower/upower/-/archive/$_distver/upower-$_distver.tar.bz2
0001-Add-torch-support.patch
0002-Detect-USB-Type-C-port-controller-and-other-chargers.patch
0003-torch-be-more-specific-when-searching-for-an-led-dev.patch
0004-daemon-Sync-icon-and-warning-for-non-default-low-level.patch
0001-Detect-USB-Type-C-port-controller-and-other-chargers.patch
0002-daemon-Sync-icon-and-warning-for-non-default-low-level.patch
"
builddir="$srcdir/$pkgname-$_distver"
@ -58,8 +56,6 @@ package() {
sha512sums="
918fdba13df7ba85fd276daae68228554e71df95011b48dc42b006a059cf2996f906ce08e98f6d1da07c8f2a4235bc9622992fa42eaaf05a08f1a3650f4ae4b6 upower-UPOWER_0_99_11.tar.bz2
c6c8a557f8ca650e6e2b8b1f64f70744dc610f86f71d88602014b6c241c96821b5662f48ab63da6a2da9e52017b8d9f7a87655f8f640e87b5d17417577079b0b 0001-Add-torch-support.patch
0673d32e8c3d313e21437e7d431068b4a0c51a4d63acf414fc93430c461ab5acbcc2ae8740d6614ed9487fadb8ae2c685e02fb7ad3623b71a20ccb90c1a0bd28 0002-Detect-USB-Type-C-port-controller-and-other-chargers.patch
c0c440103f3712106728e02520de66875de36fb7799c57bfef8952d03bae00beaa2c9b6335115050e9d484d013f3bcb88230d7d9a1bc8c0f0305f77a0e8fcfa8 0003-torch-be-more-specific-when-searching-for-an-led-dev.patch
77d8ab65118a3e776522665cdb66b7653eb0f9c6db2c82ddac0bf7ef0b25a262a054f38ccc403da3321209081b09ddfdc053fcf432b2e43a14e965aa60ae5c12 0004-daemon-Sync-icon-and-warning-for-non-default-low-level.patch
0673d32e8c3d313e21437e7d431068b4a0c51a4d63acf414fc93430c461ab5acbcc2ae8740d6614ed9487fadb8ae2c685e02fb7ad3623b71a20ccb90c1a0bd28 0001-Detect-USB-Type-C-port-controller-and-other-chargers.patch
77d8ab65118a3e776522665cdb66b7653eb0f9c6db2c82ddac0bf7ef0b25a262a054f38ccc403da3321209081b09ddfdc053fcf432b2e43a14e965aa60ae5c12 0002-daemon-Sync-icon-and-warning-for-non-default-low-level.patch
"