From: Linus Torvalds <torvalds@linux-foundation.org>
Date: Thu, 21 Mar 2024 20:21:31 +0000 (-0700)
Subject: Merge tag 'char-misc-6.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh... 
X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=bb41fe35dce709ea8f91d313c558ee6c68f705ef;p=linux.git

Merge tag 'char-misc-6.9-rc1' of git://git./linux/kernel/git/gregkh/char-misc

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
  ...
---

bb41fe35dce709ea8f91d313c558ee6c68f705ef
diff --cc Documentation/devicetree/bindings/vendor-prefixes.yaml
index 04505cb0b640f,82e9f64c90ff4..b97d298b3eb69
--- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
@@@ -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 drivers/accessibility/speakup/devsynth.c
index d305716635855,da4d0f6aa5bf9..cb7e1114e8ebe
--- a/drivers/accessibility/speakup/devsynth.c
+++ b/drivers/accessibility/speakup/devsynth.c
@@@ -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)
  {