> Date: Thu, 4 Jun 2020 17:34:44 -0400
> From: George Koehler <kern...@gmail.com>
> 
> This diff is for macppc "model PowerBook5,4".  It adds the missing
> audio volume control by changing the driver from aoa(4) to snapper(4).
> 
> Before the diff, I needed to put my ear near the speaker to check if
> audio was playing.  After the diff, the speaker was so loud (about
> output.level=0.75) that I used sndioctl to turn it down.  The diff
> uses strcmp(hw_prod, "PowerBook5,4") to attach the other driver.
> 
> In OpenBSD,
>   aoa(4) is i2s with no volume control.
>   snapper(4) is i2s with TAS3004 volume control.
> In Mac OS X, system profiler shows TAS3004 audio on my PowerBook5,4.
> 
> NetBSD doesn't check the "PowerBook5,4" model string.  NetBSD's
> sys/arch/macppc/dev/snapper.c snapper_defer() looks for a "deq" in
> the device tree.  No "deq" means no hardware volume control.
> 
> OpenBSD defines a DEQaddr and doesn't check "deq".  We do look for
> the kiic(4) on macobio(4) -- this device has "deq" -- but this
> happens late in snapper_defer(), after kiic(4) attaches, which is
> after aoa(4) or snapper(4) attaches.  By checking "PowerBook5,4", I
> can pick aoa(4) or snapper(4) without knowing kiic(4).  See part of
> my dmesg and eeprom -p, below the diff.
> 
> OK to commit?

While it isn't "right", this is probably the least invasive way to
handle this.  Apple just made too big a mess of their OFW device tree :(.

ok kettenis@

> Index: share/man/man4/man4.macppc/aoa.4
> ===================================================================
> RCS file: /cvs/src/share/man/man4/man4.macppc/aoa.4,v
> retrieving revision 1.9
> diff -u -p -r1.9 aoa.4
> --- share/man/man4/man4.macppc/aoa.4  2 Jul 2016 16:28:50 -0000       1.9
> +++ share/man/man4/man4.macppc/aoa.4  4 Jun 2020 20:39:33 -0000
> @@ -46,8 +46,6 @@ driver include:
>  .Pp
>  .Bl -dash -offset indent -compact
>  .It
> -PowerBook5,4
> -.It
>  PowerMac7,3
>  .It
>  PowerMac9,1
> Index: share/man/man4/man4.macppc/snapper.4
> ===================================================================
> RCS file: /cvs/src/share/man/man4/man4.macppc/snapper.4,v
> retrieving revision 1.16
> diff -u -p -r1.16 snapper.4
> --- share/man/man4/man4.macppc/snapper.4      15 Jan 2015 20:37:36 -0000      
> 1.16
> +++ share/man/man4/man4.macppc/snapper.4      4 Jun 2020 20:39:33 -0000
> @@ -57,6 +57,8 @@ PowerBook5,2
>  .It
>  PowerBook5,3
>  .It
> +PowerBook5,4
> +.It
>  PowerBook5,5
>  .It
>  PowerBook5,6
> Index: sys/arch/macppc/dev/aoa.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/macppc/dev/aoa.c,v
> retrieving revision 1.9
> diff -u -p -r1.9 aoa.c
> --- sys/arch/macppc/dev/aoa.c 19 Sep 2016 06:46:43 -0000      1.9
> +++ sys/arch/macppc/dev/aoa.c 4 Jun 2020 20:39:33 -0000
> @@ -57,6 +57,8 @@ void aoa_attach(struct device *, struct 
>  void aoa_defer(struct device *);
>  void aoa_set_volume(struct aoa_softc *, int, int);
>  
> +extern char *hw_prod;
> +
>  struct cfattach aoa_ca = {
>       sizeof(struct aoa_softc), aoa_match, aoa_attach
>  };
> @@ -107,7 +109,8 @@ aoa_match(struct device *parent, void *m
>       bzero(compat, sizeof compat);
>       OF_getprop(soundchip, "compatible", compat, sizeof compat);
>  
> -     if (strcmp(compat, "AOAKeylargo") == 0)
> +     if (strcmp(compat, "AOAKeylargo") == 0 &&
> +         strcmp(hw_prod, "PowerBook5,4") != 0)
>               return (1);
>       if (strcmp(compat, "AOAK2") == 0)
>               return (1);
> Index: sys/arch/macppc/dev/snapper.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/macppc/dev/snapper.c,v
> retrieving revision 1.37
> diff -u -p -r1.37 snapper.c
> --- sys/arch/macppc/dev/snapper.c     19 Sep 2016 06:46:43 -0000      1.37
> +++ sys/arch/macppc/dev/snapper.c     4 Jun 2020 20:39:34 -0000
> @@ -70,6 +70,8 @@ void snapper_set_input(struct snapper_so
>  int tas3004_write(struct snapper_softc *, u_int, const void *);
>  int tas3004_init(struct snapper_softc *);
>  
> +extern char *hw_prod;
> +
>  struct cfattach snapper_ca = {
>       sizeof(struct snapper_softc), snapper_match, snapper_attach
>  };
> @@ -442,6 +444,9 @@ snapper_match(struct device *parent, voi
>       bzero(compat, sizeof compat);
>       OF_getprop(soundchip, "compatible", compat, sizeof compat);
>  
> +     if (strcmp(compat, "AOAKeylargo") == 0 &&
> +         strcmp(hw_prod, "PowerBook5,4") == 0)
> +             return (1);
>       if (strcmp(compat, "snapper") == 0)
>               return (1);
>  
> 
> Part of dmesg:
> [ using 1155980 bytes of bsd ELF symbol table ]
> console out [ATY,Jasper_A] console in [keyboard]USB and ADB found, using ADB
> using parent ATY,JasperParent:: memaddr b8000000, size 8000000 : consaddr 
> b8008000 : ioaddr b0020000, size 20000: width 1280 linebytes 1280 height 854 
> depth 8
> Copyright (c) 1982, 1986, 1989, 1991, 1993
>       The Regents of the University of California.  All rights reserved.
> Copyright (c) 1995-2020 OpenBSD. All rights reserved.  https://www.OpenBSD.org
> 
> OpenBSD 6.7-current (GENERIC) #1: Thu Jun  4 16:12:14 EDT 2020
>     kern...@wisconsin.my.domain:/usr/src/sys57/arch/macppc/compile/GENERIC
> real mem = 1073741824 (1024MB)
> avail mem = 1026486272 (978MB)
> random: good seed from bootblocks
> mpath0 at root
> scsibus0 at mpath0: 256 targets
> mainbus0 at root: model PowerBook5,4
> cpu0 at mainbus0: 7447A (Revision 0x101): 1499 MHz: 512KB L2 cache
> mem0 at mainbus0
> spdmem0 at mem0: 1GB DDR SDRAM non-parity PC2700CL2.5
> spdmem1 at mem0: 1GB DDR SDRAM non-parity PC2700CL2.5
> memc0 at mainbus0: uni-n rev 0xd2
> "hw-clock" at memc0 not configured
> kiic0 at memc0 offset 0xf8001000
> iic0 at kiic0
> adt0 at iic0 addr 0xae: adt7460 rev 0x62
> "lmu-controller" at iic0 addr 0x42 not configured
> mpcpcibr0 at mainbus0 pci: uni-north
> pci0 at mpcpcibr0 bus 0
> pchb0 at pci0 dev 11 function 0 "Apple UniNorth AGP" rev 0x00
> agp at pchb0 not configured
> radeondrm0 at pci0 dev 16 function 0 "ATI Radeon Mobility M10" rev 0x00
> drm0 at radeondrm0
> radeondrm0: irq 48
> mpcpcibr1 at mainbus0 pci: uni-north
> pci1 at mpcpcibr1 bus 0
> macobio0 at pci1 dev 23 function 0 "Apple Intrepid" rev 0x00
> openpic0 at macobio0 offset 0x40000: version 0x4614 feature 3f0302 LE
> macgpio0 at macobio0 offset 0x50
> "modem-reset" at macgpio0 offset 0x1d not configured
> "modem-power" at macgpio0 offset 0x1c not configured
> macgpio1 at macgpio0 offset 0x9: irq 47
> "programmer-switch" at macgpio0 offset 0x11 not configured
> dfs0 at macgpio0 offset 0x6b: speeds: 1499, 749 MHz
> "gpio4" at macgpio0 offset 0x1e not configured
> "gpio5" at macgpio0 offset 0x6f not configured
> "gpio6" at macgpio0 offset 0x70 not configured
> "extint-gpio4" at macgpio0 offset 0x5c not configured
> "gpio11" at macgpio0 offset 0x75 not configured
> "extint-gpio15" at macgpio0 offset 0x67 not configured
> "escc-legacy" at macobio0 offset 0x12000 not configured
> zs0 at macobio0 offset 0x13000: irq 22,23
> zstty0 at zs0 channel 0
> zstty1 at zs0 channel 1
> snapper0 at macobio0 offset 0x10000: irq 30,1,2
> "timer" at macobio0 offset 0x15000 not configured
> adb0 at macobio0 offset 0x16000: irq 25, via-pmu, 3 targets
> apm0 at adb0: battery flags 0x5, 98% charged
> piic0 at adb0
> iic1 at piic0
> akbd0 at adb0 addr 2: PowerBook G4 keyboard (Inverted T)
> wskbd0 at akbd0: console keyboard
> ams0 at adb0 addr 3: EMP trackpad <tpad> 4-button, 400 dpi
> wsmouse0 at ams0 mux 0
> abtn0 at adb0 addr 7: brightness/volume/eject buttons
> "battery" at macobio0 offset 0x0 not configured
> "backlight" at macobio0 offset 0xf300 not configured
> kiic1 at macobio0 offset 0x18000
> iic2 at kiic1
> wdc0 at macobio0 offset 0x20000 irq 24: DMA
> atapiscsi0 at wdc0 channel 0 drive 0
> scsibus1 at atapiscsi0: 2 targets
> cd0 at scsibus1 targ 0 lun 0: <MATSHITA, DVD-R UJ-825, DAM5> removable
> cd0(wdc0:0:0): using BIOS timings, DMA mode 2
> audio0 at snapper0
> bwi0 at pci1 dev 18 function 0 "Broadcom BCM4306" rev 0x03: irq 52, address 
> 00:0d:93:ef:83:58
> cbb0 at pci1 dev 19 function 0 "TI PCI1510 CardBus" rev 0x00: irq 53
> ohci0 at pci1 dev 26 function 0 "Apple Intrepid USB" rev 0x00: irq 29, 
> version 1.0, legacy support
> ohci1 at pci1 dev 27 function 0 "NEC USB" rev 0x43: irq 63, version 1.0
> ohci2 at pci1 dev 27 function 1 "NEC USB" rev 0x43: irq 63, version 1.0
> ehci0 at pci1 dev 27 function 2 "NEC USB" rev 0x04: irq 63
> usb0 at ehci0: USB revision 2.0
> uhub0 at usb0 configuration 1 interface 0 "NEC EHCI root hub" rev 2.00/1.00 
> addr 1
> cardslot0 at cbb0 slot 0 flags 0
> cardbus0 at cardslot0: bus 1 device 0 cacheline 0x8, lattimer 0x20
> pcmcia0 at cardslot0
> usb1 at ohci0: USB revision 1.0
> uhub1 at usb1 configuration 1 interface 0 "Apple OHCI root hub" rev 1.00/1.00 
> addr 1
> usb2 at ohci1: USB revision 1.0
> uhub2 at usb2 configuration 1 interface 0 "NEC OHCI root hub" rev 1.00/1.00 
> addr 1
> usb3 at ohci2: USB revision 1.0
> uhub3 at usb3 configuration 1 interface 0 "NEC OHCI root hub" rev 1.00/1.00 
> addr 1
> mpcpcibr2 at mainbus0 pci: uni-north
> pci2 at mpcpcibr2 bus 0
> kauaiata0 at pci2 dev 13 function 0 "Apple Intrepid ATA" rev 0x00
> wdc1 at kauaiata0 irq 39: DMA
> wd0 at wdc1 channel 0 drive 0: <WDC WD2500BEVE-00WZT0>
> wd0: 16-sector PIO, LBA48, 238475MB, 488397168 sectors
> wd0(wdc1:0:0): using PIO mode 4, DMA mode 2, Ultra-DMA mode 5
> "Apple UniNorth Firewire" rev 0x81 at pci2 dev 14 function 0 not configured
> gem0 at pci2 dev 15 function 0 "Apple Uni-N2 GMAC" rev 0x80: irq 41, address 
> 00:0d:93:b4:cc:d4
> eephy0 at gem0 phy 0: 88E1111 Gigabit PHY, rev. 1
> rum0 at uhub0 port 1 configuration 1 interface 0 "Belkin Belkin 54g USB 
> Network Adapter" rev 2.00/0.01 addr 2
> rum0: MAC/BBP RT2573 (rev 0x2573a), RF RT2528, address 00:17:3f:85:5f:81
> uhidev0 at uhub1 port 1 configuration 1 interface 0 "Apple Computer 
> HID-proxy" rev 1.10/12.41 addr 2
> uhidev0: iclass 3/1
> ukbd0 at uhidev0: 8 variable keys, 6 key codes
> wskbd1 at ukbd0 mux 1
> uhidev1 at uhub1 port 1 configuration 1 interface 1 "Apple Computer 
> HID-proxy" rev 1.10/12.41 addr 2
> uhidev1: iclass 3/1
> ums0 at uhidev1: 5 buttons
> wsmouse1 at ums0 mux 0
> uhidev2 at uhub3 port 1 configuration 1 interface 0 "CHESEN USB Keyboard" rev 
> 1.10/1.10 addr 2
> uhidev2: iclass 3/1
> ukbd1 at uhidev2: 8 variable keys, 6 key codes, country code 33
> wskbd2 at ukbd1 mux 1
> uhidev3 at uhub3 port 1 configuration 1 interface 1 "CHESEN USB Keyboard" rev 
> 1.10/1.10 addr 2
> uhidev3: iclass 3/0, 3 report ids
> uhid0 at uhidev3 reportid 2: input=1, output=0, feature=0
> uhid1 at uhidev3 reportid 3: input=3, output=0, feature=0
> vscsi0 at root
> scsibus2 at vscsi0: 256 targets
> softraid0 at root
> scsibus3 at softraid0: 256 targets
> bootpath: /pci@f4000000/ata-6@d/disk@0:/bsd
> root on wd0a (f9af1cad957793db.a) swap on wd0b dump on wd0b
> initializing kernel modesetting (RV350 0x1002:0x4E50 0x1002:0x4E50 0x00).
> ...
> 
> Part of eeprom -p:
> ...
>             Node 0xff9740e0
>                 name: 'i2s'
>                 device_type: 'i2s'
>                 built-in: 
>                 reg: 
> 00010000.00001000.00008000.00000100.00008100.00000100.00008200.00000100.00008300.00000100
>                 #address-cells: 00000001
>                 ranges: 
> 
>                 Node 0xff9742f8
>                     name: 'i2s-a'
>                     device_type: 'soundbus'
>                     compatible: 'i2sbus'
>                     built-in: 
>                     reg: 00010000.00001000.00008000.00000100.00008100.00000100
>                     interrupts: 
> 0000001e.00000001.00000001.00000000.00000002.00000000
>                     interrupt-parent: ff9700a0
>                     AAPL,requested-priorities: 00000002.00000004.00000004
>                     AAPL,clock-id: 'i2s0i045i049i018'
>                     AAPL,clock-data: 
> 02b11000.0000003c.00003400.00000044.00004000.00000044.00000400.00000044.00000004.69303439.6e756c6c.00000000.02ee0000.0000003c.00003400.00000044.00004000.00000044.00000200.00000044.00000002.69303435.6e756c6c.00000000.01194000.0000003c.00003000.0000003c.00000400.00000044.00004000.00000000.00000000.6e756c6c.6e756c6c.00000000
> 
>                     Node 0xff974610
>                         name: 'sound'
>                         device_type: 'soundchip'
>                         compatible: 'AOAKeylargo'
>                         vendor-id: 0000106b
>                         layout-id: 00000033
>                         object-model-version: 00000002
> 
>                 Node 0xff9d8148
>                     name: 'i2s-b'
>                     device_type: 'i2s-b'
>                     compatible: 'i2s-modem'
>                     built-in: 
>                     reg: 00011000.00001000.00008200.00000100.00008300.00000100
>                     interrupts: 
> 0000001f.00000001.00000003.00000000.00000004.00000000
>                     interrupt-parent: ff9700a0
>                     sw-reset-enable: 00000000
> ...
>             Node 0xff97c0a8
>                 name: 'i2c'
>                 device_type: 'i2c'
>                 reg: 00018000.00001000
>                 compatible: 'keywest-i2c'
>                 #size-cells: 00000000
>                 #address-cells: 00000001
>                 built-in: 
>                 interrupts: 0000001a.00000001
>                 interrupt-parent: ff9700a0
>                 AAPL,address: 80018000
>                 AAPL,address-step: 00000010
>                 AAPL,i2c-rate: 00000064
>                 AAPL,driver-name: '.i2c-mac-io'
> 
>                 Node 0xff97cc90
>                     reg: 000001c0
>                     name: 'cereal'
>                     device_type: 'serial'
> 
>                 Node 0xff97d3c0
>                     name: 'deq'
>                     device_type: 'deq'
>                     reg: 0000006a
>                     i2c-address: 0000006a
> ...
> 
> 

Reply via email to