MacBook Pro Webcam / Facetime does not work

Hi there :wave:

Yesterday I set up openSUSE Tumbeleweed as a dual boot operating system on my Mac Book Pro (model 1502). And so far everything works great - good job @all.

The only problem that I discovered is that the webcam doesn’t work.
So I started searching and I found this guide in the openSUSE jungle:
SDB:Installation on a Mac - openSUSE Wiki.

I followed the instructions for the webcam section until the autoload of the module on boot via modprobe.d.

Something happened after the implementation. Previously, the Cheese app said “no device found”. Now it says something that looks right but doesn’t work yet:

Here is the history of my terminal executions:

Terminal history
bb@suse:~> sudo lspci | grep -i facetime
[sudo] password for root: 
02:00.0 Multimedia controller: Broadcom Inc. and subsidiaries 720p FaceTime HD Camera
bb@suse:~> sudo zypper install kernel-devel
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 23 NEW packages are going to be installed:
  binutils dwarves gcc gcc13 glibc-devel kernel-default-devel kernel-devel
  kernel-macros libasan8 libctf0 libctf-nobfd0 libdwarves1 libelf-devel
  libhwasan0 libitm1 liblsan0 libtsan2 libxcrypt-devel libzstd-devel
  linux-glibc-devel make site-config zlib-devel

23 new packages to install.
Overall download size: 75.9 MiB. Already cached: 0 B. After the operation,
additional 252.4 MiB will be used.
Continue? [y/n/v/...? shows all options] (y): y
Retrieving: kernel-macros-6.8.1-1.1.noarch (openSUSE-Tumbleweed-Oss)
                                                         (1/23),   3.3 MiB    
Retrieving: kernel-macros-6.8.1-1.1.noarch.rpm .............[done (9.5 MiB/s)]
Retrieving: libasan8-14.0.1+git9355-1.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                         (2/23), 477.8 KiB    
Retrieving: libasan8-14.0.1+git9355-1.1.x86_64.rpm .......[done (348.0 KiB/s)]
Retrieving: libctf-nobfd0-2.42-2.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                         (3/23), 131.6 KiB    
Retrieving: libctf-nobfd0-2.42-2.1.x86_64.rpm ..............[done (1.0 MiB/s)]
Retrieving: libdwarves1-1.26-1.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                         (4/23),  92.6 KiB    
Retrieving: libdwarves1-1.26-1.1.x86_64.rpm ..............[done (535.1 KiB/s)]
Retrieving: libhwasan0-14.0.1+git9355-1.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                         (5/23), 250.5 KiB    
Retrieving: libhwasan0-14.0.1+git9355-1.1.x86_64.rpm .......[done (1.6 MiB/s)]
Retrieving: libitm1-14.0.1+git9355-1.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                         (6/23),  40.3 KiB    
Retrieving: libitm1-14.0.1+git9355-1.1.x86_64.rpm ......................[done]
Retrieving: liblsan0-14.0.1+git9355-1.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                         (7/23), 207.2 KiB    
Retrieving: liblsan0-14.0.1+git9355-1.1.x86_64.rpm .......[done (394.8 KiB/s)]
Retrieving: libtsan2-14.0.1+git9355-1.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                         (8/23), 416.4 KiB    
Retrieving: libtsan2-14.0.1+git9355-1.1.x86_64.rpm .........[done (3.3 MiB/s)]
Retrieving: libxcrypt-devel-4.4.36-1.5.x86_64 (openSUSE-Tumbleweed-Oss)
                                                         (9/23),  34.3 KiB    
Retrieving: libxcrypt-devel-4.4.36-1.5.x86_64.rpm ..........[done (2.6 KiB/s)]
Retrieving: linux-glibc-devel-6.8-1.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                        (10/23),   1.3 MiB    
Retrieving: linux-glibc-devel-6.8-1.1.x86_64.rpm ...........[done (5.8 MiB/s)]
Retrieving: make-4.4.1-3.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                        (11/23), 322.8 KiB    
Retrieving: make-4.4.1-3.1.x86_64.rpm ....................[done (208.3 KiB/s)]
Retrieving: site-config-0.2-14.5.x86_64 (openSUSE-Tumbleweed-Oss)
                                                        (12/23),  17.2 KiB    
Retrieving: site-config-0.2-14.5.x86_64.rpm ..............[done (124.2 KiB/s)]
Retrieving: kernel-devel-6.8.1-1.1.noarch (openSUSE-Tumbleweed-Oss)
                                                        (13/23),  18.3 MiB    
Retrieving: kernel-devel-6.8.1-1.1.noarch.rpm .............[done (10.8 MiB/s)]
Retrieving: libctf0-2.42-2.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                        (14/23), 131.3 KiB    
Retrieving: libctf0-2.42-2.1.x86_64.rpm ..................[done (676.9 KiB/s)]
Retrieving: binutils-2.42-2.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                        (15/23),   7.7 MiB    
Retrieving: binutils-2.42-2.1.x86_64.rpm ...................[done (8.0 MiB/s)]
Retrieving: dwarves-1.26-1.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                        (16/23), 117.1 KiB    
Retrieving: dwarves-1.26-1.1.x86_64.rpm ..................[done (789.9 KiB/s)]
Retrieving: glibc-devel-2.39-4.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                        (17/23), 612.6 KiB    
Retrieving: glibc-devel-2.39-4.1.x86_64.rpm ................[done (6.0 MiB/s)]
Retrieving: zlib-devel-1.3.1-1.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                        (18/23), 123.5 KiB    
Retrieving: zlib-devel-1.3.1-1.1.x86_64.rpm ..............[done (219.7 KiB/s)]
Retrieving: libzstd-devel-1.5.5-6.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                        (19/23),  66.2 KiB    
Retrieving: libzstd-devel-1.5.5-6.1.x86_64.rpm ...........[done (487.0 KiB/s)]
Retrieving: gcc13-13.2.1+git8285-3.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                        (20/23),  34.9 MiB    
Retrieving: gcc13-13.2.1+git8285-3.1.x86_64.rpm ...........[done (13.1 MiB/s)]
Retrieving: libelf-devel-0.191-1.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                        (21/23), 713.4 KiB    
Retrieving: libelf-devel-0.191-1.1.x86_64.rpm ..............[done (5.0 MiB/s)]
Retrieving: gcc-13-2.1.x86_64 (openSUSE-Tumbleweed-Oss) (22/23),  10.3 KiB    
Retrieving: gcc-13-2.1.x86_64.rpm ..........................[done (2.4 KiB/s)]
Retrieving: kernel-default-devel-6.8.1-1.1.x86_64 (openSUSE-Tumbleweed-Oss)
                                                        (23/23),   6.7 MiB    
Retrieving: kernel-default-devel-6.8.1-1.1.x86_64.rpm .....[done (10.5 MiB/s)]

Checking for file conflicts: ...........................................[done]
( 1/23) Installing: kernel-macros-6.8.1-1.1.noarch .....................[done]
( 2/23) Installing: libasan8-14.0.1+git9355-1.1.x86_64 .................[done]
( 3/23) Installing: libctf-nobfd0-2.42-2.1.x86_64 ......................[done]
( 4/23) Installing: libdwarves1-1.26-1.1.x86_64 ........................[done]
( 5/23) Installing: libhwasan0-14.0.1+git9355-1.1.x86_64 ...............[done]
( 6/23) Installing: libitm1-14.0.1+git9355-1.1.x86_64 ..................[done]
( 7/23) Installing: liblsan0-14.0.1+git9355-1.1.x86_64 .................[done]
( 8/23) Installing: libtsan2-14.0.1+git9355-1.1.x86_64 .................[done]
( 9/23) Installing: libxcrypt-devel-4.4.36-1.5.x86_64 ..................[done]
(10/23) Installing: linux-glibc-devel-6.8-1.1.x86_64 ...................[done]
(11/23) Installing: make-4.4.1-3.1.x86_64 ..............................[done]
(12/23) Installing: site-config-0.2-14.5.x86_64 ........................[done]
(13/23) Installing: kernel-devel-6.8.1-1.1.noarch ......................[done]
(14/23) Installing: libctf0-2.42-2.1.x86_64 ............................[done]
update-alternatives: using /usr/bin/ld.bfd to provide /usr/bin/ld (ld) in auto mode
(15/23) Installing: binutils-2.42-2.1.x86_64 ...........................[done]
(16/23) Installing: dwarves-1.26-1.1.x86_64 ............................[done]
(17/23) Installing: glibc-devel-2.39-4.1.x86_64 ........................[done]
(18/23) Installing: zlib-devel-1.3.1-1.1.x86_64 ........................[done]
(19/23) Installing: libzstd-devel-1.5.5-6.1.x86_64 .....................[done]
(20/23) Installing: gcc13-13.2.1+git8285-3.1.x86_64 ....................[done]
(21/23) Installing: libelf-devel-0.191-1.1.x86_64 ......................[done]
(22/23) Installing: gcc-13-2.1.x86_64 ..................................[done]
(23/23) Installing: kernel-default-devel-6.8.1-1.1.x86_64 ..............[done]
Running post-transaction scripts .......................................[done]
bb@suse:~> cd /tmp/
bb@suse:/tmp> git clone https://github.com/patjak/facetimehd-firmware
Cloning into 'facetimehd-firmware'...
remote: Enumerating objects: 899, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 899 (delta 5), reused 12 (delta 5), pack-reused 885
Receiving objects: 100% (899/899), 294.35 KiB | 3.82 MiB/s, done.
Resolving deltas: 100% (590/590), done.
bb@suse:/tmp> cd facetimehd-firmware/
bb@suse:/tmp/facetimehd-firmware> ls
debian  extract-firmware.sh  facetimehd-firmware-install.sh  Makefile
bb@suse:/tmp/facetimehd-firmware> make

Checking dependencies for driver download...
/usr/bin/curl
/usr/bin/xzcat
/usr/bin/cpio

Downloading the driver, please wait...


Found matching hash from OS X, El Capitan 10.11.5
==> Extracting firmware...
 --> Decompressing the firmware using gzip...
 --> Deleting temporary files...
 --> Extracted firmware version 1.43.0

bb@suse:/tmp/facetimehd-firmware> ls
AppleCameraInterface  extract-firmware.sh             firmware.bin
debian                facetimehd-firmware-install.sh  Makefile
bb@suse:/tmp/facetimehd-firmware> sudo make install
Copying firmware into '//usr/lib/firmware/facetimehd'
bb@suse:/tmp/facetimehd-firmware> cd ..
bb@suse:/tmp> git clone https://github.com/patjak/bcwc_pcie.git
Cloning into 'bcwc_pcie'...
remote: Enumerating objects: 1166, done.
remote: Counting objects: 100% (83/83), done.
remote: Compressing objects: 100% (43/43), done.
remote: Total 1166 (delta 50), reused 60 (delta 40), pack-reused 1083
Receiving objects: 100% (1166/1166), 420.96 KiB | 4.89 MiB/s, done.
Resolving deltas: 100% (777/777), done.
bb@suse:/tmp> cd bcwc_pcie/
bb@suse:/tmp/bcwc_pcie> ls
dkms.conf      fthd_ddr.h      fthd_hw.c   fthd_ringbuf.c  Makefile
firmware       fthd_debugfs.c  fthd_hw.h   fthd_ringbuf.h  README.md
fthd_buffer.c  fthd_debugfs.h  fthd_isp.c  fthd_v4l2.c
fthd_buffer.h  fthd_drv.c      fthd_isp.h  fthd_v4l2.h
fthd_ddr.c     fthd_drv.h      fthd_reg.h  LICENSE
bb@suse:/tmp/bcwc_pcie> make
make -C /lib/modules/6.8.1-1-default/build M=/tmp/bcwc_pcie modules
make[1]: Entering directory '/usr/src/linux-6.8.1-1-obj/x86_64/default'
  CC [M]  /tmp/bcwc_pcie/fthd_ddr.o
  CC [M]  /tmp/bcwc_pcie/fthd_hw.o
  CC [M]  /tmp/bcwc_pcie/fthd_drv.o
  CC [M]  /tmp/bcwc_pcie/fthd_ringbuf.o
  CC [M]  /tmp/bcwc_pcie/fthd_isp.o
  CC [M]  /tmp/bcwc_pcie/fthd_v4l2.o
  CC [M]  /tmp/bcwc_pcie/fthd_buffer.o
  CC [M]  /tmp/bcwc_pcie/fthd_debugfs.o
  LD [M]  /tmp/bcwc_pcie/facetimehd.o
  MODPOST /tmp/bcwc_pcie/Module.symvers
  CC [M]  /tmp/bcwc_pcie/facetimehd.mod.o
  LD [M]  /tmp/bcwc_pcie/facetimehd.ko
  BTF [M] /tmp/bcwc_pcie/facetimehd.ko
Skipping BTF generation for /tmp/bcwc_pcie/facetimehd.ko due to unavailability of vmlinux
make[1]: Leaving directory '/usr/src/linux-6.8.1-1-obj/x86_64/default'
bb@suse:/tmp/bcwc_pcie> sudo make install
make -C /lib/modules/6.8.1-1-default/build M=/tmp/bcwc_pcie modules_install
make[1]: Entering directory '/usr/src/linux-6.8.1-1-obj/x86_64/default'
  INSTALL /usr/lib/modules/6.8.1-1-default/updates/facetimehd.ko
  DEPMOD  /usr/lib/modules/6.8.1-1-default
Warning: modules_install: missing 'System.map' file. Skipping depmod.
make[1]: Leaving directory '/usr/src/linux-6.8.1-1-obj/x86_64/default'
bb@suse:/tmp/bcwc_pcie> sudo depmod
bb@suse:/tmp/bcwc_pcie> sudo modprobe facetimehd
bb@suse:/tmp/bcwc_pcie> sudo lspci -vd 14e4:
02:00.0 Multimedia controller: Broadcom Inc. and subsidiaries 720p FaceTime HD Camera
	Subsystem: Broadcom Inc. and subsidiaries 720p FaceTime HD Camera
	Flags: bus master, fast devsel, latency 0, IRQ 81
	Memory at c1700000 (64-bit, non-prefetchable) [size=64K]
	Memory at a0000000 (64-bit, prefetchable) [size=256M]
	Memory at c1600000 (64-bit, non-prefetchable) [size=1M]
	Capabilities: [48] Power Management version 3
	Capabilities: [58] MSI: Enable+ Count=1/1 Maskable- 64bit+
	Capabilities: [68] Vendor Specific Information: Len=44 <?>
	Capabilities: [ac] Express Endpoint, MSI 00
	Capabilities: [100] Advanced Error Reporting
	Capabilities: [13c] Device Serial Number 00-00-00-ff-ff-00-00-00
	Capabilities: [150] Power Budgeting <?>
	Capabilities: [160] Virtual Channel
	Capabilities: [1b0] Latency Tolerance Reporting
	Capabilities: [220] Physical Resizable BAR
	Kernel driver in use: facetimehd
	Kernel modules: facetimehd

03:00.0 Network controller: Broadcom Inc. and subsidiaries BCM43602 802.11ac Wireless LAN SoC (rev 01)
	Subsystem: Apple Inc. Device 0133
	Flags: bus master, fast devsel, latency 0, IRQ 80
	Memory at c1400000 (64-bit, non-prefetchable) [size=32K]
	Memory at c1000000 (64-bit, non-prefetchable) [size=4M]
	Capabilities: [48] Power Management version 3
	Capabilities: [58] MSI: Enable+ Count=1/16 Maskable- 64bit+
	Capabilities: [68] Vendor Specific Information: Len=44 <?>
	Capabilities: [ac] Express Endpoint, MSI 00
	Capabilities: [100] Advanced Error Reporting
	Capabilities: [13c] Device Serial Number 1e-4f-a7-ff-ff-9b-98-01
	Capabilities: [150] Power Budgeting <?>
	Capabilities: [160] Virtual Channel
	Capabilities: [1b0] Latency Tolerance Reporting
	Capabilities: [220] Physical Resizable BAR
	Capabilities: [240] L1 PM Substates
	Kernel driver in use: brcmfmac
	Kernel modules: brcmfmac

bb@suse:/tmp/bcwc_pcie> 

My next step was to take a look in the forum and I’ve found these two topics:

This is a completely different approach to what I have found and done so far.
So my question is:

Am I so close to the goal that it is the best way to find a solution for the current and official path I have already taken?
And when yes, what should I do next?

Or:
Should I follow the other instructions with isight?
And when yes, should I undo the steps of my first way?
Btw: I’m not sure if I have an isight camera?! (I only ever read facetime)

Thank you all for taking the time to help. :slightly_smiling_face: :pizza:

@moodyMoose Hi, what year MacBook? I have a 2007 that needs iSight. But you will definitely need firmware for the device…

Hi @malcolmlewis

“But you will definitely need firmware for the device”

So the steps that I already did are definitely not enough?

The model is 1502.
I have just had a look… This is the official Apple hardware specification page, to which my MacBook links in the system settings: MacBook Pro (Retina, 13-inch, Early 2015) - Technical Specifications - Apple Support
But honestly? I’m not really sure. I thought it would be a bit newer…but that should be correct.

I found the following about the webcam in the system report:

FaceTime HD Camera:
Model ID: Apple Camera VendorID_0x106B ProductID_0x1570

@moodyMoose the first link, the Leap 15.2 one is probably what you need. Is the system dual booting with an osX version?

I would also check the output from journalctl -b | grep firm to see if it shows what firmware is missing.

“the first link, the Leap 15.2 one is probably what you need. Is the system dual booting with an osX version?”

Ok, so I should follow these instructions?! And should I undo what I did before with the “official” way?

Yes, openSUSE is dual booting with mac OS Monterey.


Test the linked and mentioned “second” method

So now I tried to follow your instructions here: Leap 15.2 macbook camera and the general ones here: MactelSupportTeam/AppleiSight - Community Help Wiki

As I mentioned, my mac OS is Monterey. And path to the AppleUSBVideoSupport file does’nt exist anymore.

Instead of AppleUSBVideoSupport.kext there is just AppleUSBLegacyHub.kext.

Terminal of mac OS:

BBs-MacBook-Pro: bb$ cd /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/
BBs-MacBook-Pro:PlugIns bb$ ls
AppleUSBLegacyHub.kext		IOUSBHIDDriverSafeBoot.kext
IOUSBCompositeDriver.kext	IOUSBLib.bundle
IOUSBHIDDriver.kext		IOUSBUserClient.kext
IOUSBHIDDriverPM.kext

Out of this, I got the following file AppleUSBLegacyHub instead of AppleUSBVideoSupport .

I saved this file, moved forward and switched back to openSUSE.

Next, I tried to extract the firmware with ift-extract. But that didn’t work with AppleUSBLegacyHub. So I searched online for the AppleUSBVideoSupport file, downloaded it and did the ift-extract successfully again. See:

bb@suse:~/Downloads> sudo ift-extract -a AppleUSBVideoSupport
[sudo] password for root: 
** Message: 18:27:59.408: Found firmware signature at offset 0x29C8.
** Message: 18:27:59.409: Firmware extracted successfully in /lib/firmware/isight.fw
** Message: 18:27:59.409: Firmware version 2.38.83 (0x02.0x26.0x53)
** Message: 18:27:59.409: Apply patch 0 : Fix device descriptor
** Message: 18:27:59.410: Apply patch 1 : Fix interface assocation descriptor
** Message: 18:27:59.410: Apply patch 2 : Fix video interface collection
** Message: 18:27:59.410: Apply patch 3 : Fix video streaming device qualifier
** Message: 18:27:59.410: Apply patch 4 : Fix video control interface descriptor
** Message: 18:27:59.410: Apply patch 5 : Fix video streaming interface descriptor
** Message: 18:27:59.410: Firmware patched successfully

I also found in /lib/firmware the isight.fw then and saved it as a backup.
Then I opened Cheese, but the camera is still not working. The notice is “device not found”.
(Even after shutdown and restart)

Next I tried your command:

“I would also check the output from journalctl -b | grep firm to see if it shows what firmware is missing.”

There is only one interesting entry:

Mar 23 18:23:19 localhost kernel: facetimehd 0000:02:00.0: Direct firmware load for facetimehd/firmware.bin failed with error -2

But I think that is because of the first guide I’ve tried. Btw if I look in /lib/firmware/ I found a folder with “facetimehd” and a file with firmware.bin. (I didn’t undo the steps from the first guide)

Hope that you can help me further. I tried my best to document my steps.

Thank in advance.

@moodyMoose what are the permissions on the firmware.bin file, 644?

I executed: ls -l /lib/firmware/facetimehd/
Result:

-rw-r--r-- 1 root root 1425412 Mar 23 18:54 firmware.bin

@moodyMoose hmm, not really sure then. I see this way old project https://github.com/patjak/facetimehd-firmware with some scripts that need perusing to see how they did it?

There are other Apple hardware users in the forum, perhaps they don’t need the webcam or had the same issue and used an external cam.

Or you need firmware.bin that is older or newer for that device…

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.