Files
doc/hardware/005-xps13-9350.qd
T

178 lines
5.1 KiB
Plaintext

.docname {XPS 13 9350 (2024)}
.include {docs}
## Sound
Install the firmware `sof-firmware`
## Camera
The camera, while available on free software and without drivers,
produces a very bad, raw image with green tint.
To have a higher quality, we need to install a custom intel
driver.
Install `linux-firmware-intel libcamera-tools dkms linux-headers intel-vision-drivers-dkms-git pipewire-libcamera`.
Make sure that the `intel_cvs` kernel module (and dependency) is loaded:
`/etc/modules-load.d/intel_cvs.conf`:
```txt
gpio_ljca
usb_ljca
intel_cvs
```
After rebooting `cam -l` should show `1: Internal front camera (\_SB_.LINK1)`
after some warnings. `qcam` should start a raw camera stream.
The raw camera stream will have a greenish tint.
> Note: The Intel Vision Driver module must already be loaded when the ov02c10 sensor is probed.
> If you cannot see your camera, run `rmmod ov02c10` && `modprobe ov02c10` as root and try again.
For Firefox, open about:config (See Firefox#Configuration) and set media.webrtc.camera.allow-pipewire to "True".
For Chromium, enable the flag enable-webrtc-pipewire-camera in chrome://flags/ or set it in your configuration file.
### Proprietary Hardware Stack
The proprietary hardware stack requires additional components to be installed and configured,
but it provides substantially better video quality vs using only open source drivers and software.
First ensure that the above steps are complete at least to the point where qcam shows a raw camera stream.
Download `intel-ipu7-dkms-git` and modify the PKBUILD file.
```sh
mkdir ~/.camera_driver
cd ~/.camera_driver
git clone https://aur.archlinux.org/intel-ipu7-dkms-git.git
cd intel-ipu7-dkms-git
nvim PKGBUILD
```
- remove the dependency `intel-ivsc-firmware` from the `depends` section.
- Change `source=("git+${url}")` to instead point to a specific commit and
add a patch file to it
`source=("git+https://github.com/intel/ipu7-drivers.git#commit=77e3a0065697314cc7437a6eefd7e0d36ab06a4b" "https://patch-diff.githubusercontent.com/raw/intel/ipu7-drivers/pull/67.patch")`
- Add another `'SKIP'` to `sha256sums`
- In the `prepare()` section, apply the patch: `patch -Np1 -i ../67.patch`
Here is the pkgfile
```sh
# Maintainer: Yamada Hayao <shun819.mail@gmail.com,>
# Contributer: Karim Vergnes <me@thesola.io>
pkgname=intel-ipu7-dkms-git
_pkgname=ipu7-drivers
pkgver=r77.77e3a00
pkgrel=1
pkgdesc="Intel IPU7 camera drivers (DKMS)"
arch=('any')
url="https://github.com/intel/${_pkgname}"
license=('unknown')
depends=('dkms')
provides=('intel-ivsc-driver-dkms-git' 'intel-ipu7-dkms')
conflicts=('intel-ivsc-driver-dkms-git')
makedepends=('git')
source=("git+https://github.com/intel/ipu7-drivers.git#commit=77e3a0065697314cc7437a6eefd7e0d36ab06a4b" "https://patch-diff.githubusercontent.com/raw/intel/ipu7-drivers/pull/67.patch")
sha256sums=('SKIP' 'SKIP')
pkgver() {
cd $_pkgname
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
prepare() {
cd "$srcdir/$_pkgname"
patch -Np1 -i ../67.patch
sed -i "s/^PACKAGE_VERSION=\".*\"$/PACKAGE_VERSION=\"$pkgver\"/g" ./dkms.conf
}
package() {
cd "$srcdir"
install -dm755 "$pkgdir/usr/src"
cp -rT "$_pkgname" "$pkgdir/usr/src/$_pkgname-$pkgver"
}
```
Run the package build and install
- `makepkg --syncdeps`
- `makepkg --install`
Install `intel-ipu7-camera-hal-git`
Download `icamerasrc-git` and modify the PKBUILD file.
```sh
cd ~/.camera_driver
git clone https://aur.archlinux.org/icamerasrc-git.git
cd icamerasrc-git
nvim PKGBUILD
```
- replace dpendency `ipu6-camera-hal` with `ipu7-camera-hal`
Run the package build and install
- `makepkg --syncdeps`
- `makepkg --install`
### Config Files
Make sure that the kernel modules load in the correct order
Remove the file `/etc/modules-load.d/intel_cvs.conf`.
Create the file `/etc/modprobe.d/90-ipu7-usbio-order.conf` with
```txt
softdep intel_ipu7 pre: usbio gpio_usbio i2c_usbio intel_cvs intel_skl_int3472_discrete
```
Create the file `/usr/lib/udev/rules.d/90-ipu7-psys.rules`
```txt
KERNEL=="ipu7-psys0", MODE="0666", SYMLINK+="ipu-psys0"
```
Reboot the system.
Check that the camera is now working with
```sh
gst-launch-1.0 -v icamerasrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! videoconvert ! videoflip method=rotate-180 ! waylandsink
```
### V4L2 Relay
Now, we can create a V4L2 loopback device that presents the gstreamer/icamerasrc stream when activated.
Install `v4l2-relayd`.
Create the following file to instantiate the virtual v4l2loopback device on boot:
`/etc/modprobe.d/v4l2loopback.conf`:
```txt
options v4l2loopback card_label="Intel IPU7 Virtual Camera"
```
Create the systemd service file for the relay.
`/etc/v4l2-relayd.d/intel-ipu.conf`
```ini
VIDEOSRC="icamerasrc device-name=ov02c10-uf ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! videoconvert ! videoflip method=rotate-180"
FORMAT=NV12
WIDTH=1920
HEIGHT=1080
FRAMERATE=30/1
CARD_LABEL="Intel IPU7 Virtual Camera"
```
Next, enable the `v4l2-relayd@intel-ipu.service`.
After restarting your machine, any supported applications should see your camera as a standard V4L2 device with wide support.