]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Merge tag 'char-misc-6.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 21 Mar 2024 20:21:31 +0000 (13:21 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 21 Mar 2024 20:21:31 +0000 (13:21 -0700)
Pull char/misc and other driver subsystem updates from Greg KH:
 "Here is the big set of char/misc and a number of other driver
  subsystem updates for 6.9-rc1. Included in here are:

   - IIO driver updates, loads of new ones and evolution of existing ones

   - coresight driver updates

   - const cleanups for many driver subsystems

   - speakup driver additions

   - platform remove callback void cleanups

   - mei driver updates

   - mhi driver updates

   - cdx driver updates for MSI interrupt handling

   - nvmem driver updates

   - other smaller driver updates and cleanups, full details in the
    shortlog

  All of these have been in linux-next for a long time with no reported
  issue, other than a build warning for the speakup driver"

The build warning hits clang and is a gcc (and C23) extension, and is
fixed up in the merge.

Link: https://lore.kernel.org/all/20240321134831.GA2762840@dev-arch.thelio-3990X/
* tag 'char-misc-6.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (279 commits)
  binder: remove redundant variable page_addr
  uio_dmem_genirq: UIO_MEM_DMA_COHERENT conversion
  uio_pruss: UIO_MEM_DMA_COHERENT conversion
  cnic,bnx2,bnx2x: use UIO_MEM_DMA_COHERENT
  uio: introduce UIO_MEM_DMA_COHERENT type
  cdx: add MSI support for CDX bus
  pps: use cflags-y instead of EXTRA_CFLAGS
  speakup: Add /dev/synthu device
  speakup: Fix 8bit characters from direct synth
  parport: sunbpp: Convert to platform remove callback returning void
  parport: amiga: Convert to platform remove callback returning void
  char: xillybus: Convert to platform remove callback returning void
  vmw_balloon: change maintainership
  MAINTAINERS: change the maintainer for hpilo driver
  char: xilinx_hwicap: Fix NULL vs IS_ERR() bug
  hpet: remove hpets::hp_clocksource
  platform: goldfish: move the separate 'default' propery for CONFIG_GOLDFISH
  char: xilinx_hwicap: drop casting to void in dev_set_drvdata
  greybus: move is_gb_* functions out of greybus.h
  greybus: Remove usage of the deprecated ida_simple_xx() API
  ...

1  2 
.mailmap
Documentation/devicetree/bindings/vendor-prefixes.yaml
MAINTAINERS
arch/x86/Kconfig
drivers/accessibility/speakup/devsynth.c
drivers/iio/accel/adxl367.c
drivers/iio/adc/ad_sigma_delta.c
drivers/misc/fastrpc.c
drivers/misc/mei/pci-me.c
drivers/misc/mei/vsc-tp.c
drivers/of/property.c

diff --cc .mailmap
Simple merge
index 04505cb0b640f1b996606ea85c3d84206d649db8,82e9f64c90ff45db4116beb95e091705afad70db..b97d298b3eb695ba016d98b0715d692c23bb6ce1
@@@ -1573,14 -1534,12 +1573,16 @@@ patternProperties
      description: VoCore Studio
    "^voipac,.*":
      description: Voipac Technologies s.r.o.
+   "^voltafield,.*":
+     description: Voltafield Technology Corp.
    "^vot,.*":
      description: Vision Optical Technology Co., Ltd.
 +  "^vscom,.*":
 +    description: VS Visions Systems GmbH
    "^vxt,.*":
      description: VXT Ltd
 +  "^wacom,.*":
 +    description: Wacom
    "^wanchanglong,.*":
      description: Wanchanglong Electronics Technology(SHENZHEN)Co.,Ltd.
    "^wand,.*":
diff --cc MAINTAINERS
Simple merge
Simple merge
index d305716635855e6eef9331bf5357fc4e68cff333,da4d0f6aa5bf9f79accc98a1fce650ff1335a97c..cb7e1114e8ebe2df99d783cd795956384997f0bf
@@@ -34,6 -35,97 +35,98 @@@ static ssize_t speakup_file_write(struc
        return (ssize_t)nbytes;
  }
  
+ /* UTF-8 version */
+ static ssize_t speakup_file_writeu(struct file *fp, const char __user *buffer,
+                                  size_t nbytes, loff_t *ppos)
+ {
+       size_t count = nbytes, want;
+       const char __user *ptr = buffer;
+       size_t bytes;
+       unsigned long flags;
+       unsigned char buf[256];
+       u16 ubuf[256];
+       size_t in, in2, out;
+       if (!synth)
+               return -ENODEV;
+       want = 1;
+       while (count >= want) {
+               /* Copy some UTF-8 piece from userland */
+               bytes = min(count, sizeof(buf));
+               if (copy_from_user(buf, ptr, bytes))
+                       return -EFAULT;
+               /* Convert to u16 */
+               for (in = 0, out = 0; in < bytes; in++) {
+                       unsigned char c = buf[in];
+                       int nbytes = 8 - fls(c ^ 0xff);
+                       u32 value;
+                       switch (nbytes) {
+                       case 8: /* 0xff */
+                       case 7: /* 0xfe */
+                       case 1: /* 0x80 */
+                               /* Invalid, drop */
+                               goto drop;
+                       case 0:
+                               /* ASCII, copy */
+                               ubuf[out++] = c;
+                               continue;
+                       default:
+                               /* 2..6-byte UTF-8 */
+                               if (bytes - in < nbytes) {
+                                       /* We don't have it all yet, stop here
+                                        * and wait for the rest
+                                        */
+                                       bytes = in;
+                                       want = nbytes;
+                                       continue;
+                               }
+                               /* First byte */
+                               value = c & ((1u << (7 - nbytes)) - 1);
+                               /* Other bytes */
+                               for (in2 = 2; in2 <= nbytes; in2++) {
+                                       c = buf[in + 1];
+                                       if ((c & 0xc0) != 0x80) {
+                                               /* Invalid, drop the head */
+                                               want = 1;
+                                               goto drop;
+                                       }
+                                       value = (value << 6) | (c & 0x3f);
+                                       in++;
+                               }
+                               if (value < 0x10000)
+                                       ubuf[out++] = value;
+                               want = 1;
+                               break;
+                       }
+ drop:
++                      /* empty statement */;
+               }
+               count -= bytes;
+               ptr += bytes;
+               /* And speak this up */
+               if (out) {
+                       spin_lock_irqsave(&speakup_info.spinlock, flags);
+                       for (in = 0; in < out; in++)
+                               synth_buffer_add(ubuf[in]);
+                       synth_start();
+                       spin_unlock_irqrestore(&speakup_info.spinlock, flags);
+               }
+       }
+       return (ssize_t)(nbytes - count);
+ }
  static ssize_t speakup_file_read(struct file *fp, char __user *buf,
                                 size_t nbytes, loff_t *ppos)
  {
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge