Ok, je suis arrivé à quelque-chose de plus ou moins satisfaisant en recompilant un module/driver:
-
Télécharger les sources du noyau et ce qu’il faut pour compiler:
apt-get install linux-source-4.4
apt-get install git build-essential kernel-package fakeroot libncurses5-dev libssl-dev ccache
-
Se placer dans le répertoire des sources et décompresser le tar.xz
cd /usr/src/
tar xJf linux-source-4.4.tar.xz
-
Se placer dans le répertoire des sources i2c/busses
cd /usr/src/linux-source-4.4/drivers/i2c/busses/
-
Modifier les sources du fichier i2c-designware-platdrv.c et ajouter dev->sda_hold_time = 30; comme suit:
static int dw_i2c_acpi_configure(struct platform_device *pdev) { struct dw_i2c_dev *dev = platform_get_drvdata(pdev); const struct acpi_device_id *id; `` dev->adapter.nr = -1; dev->tx_fifo_depth = 32; dev->rx_fifo_depth = 32; `` /* * Try to get SDA hold time and *CNT values from an ACPI method if * it exists for both supported speed modes. */ dw_i2c_acpi_params(pdev, "SSCN", &dev->ss_hcnt, &dev->ss_lcnt, NULL); dw_i2c_acpi_params(pdev, "FMCN", &dev->fs_hcnt, &dev->fs_lcnt, &dev->sda_hold_time); ``dev->sda_hold_time = 30;
-
Compiler le driver
make -C /lib/modules/4.4.0-1-amd64/build M=/usr/src/linux-source-4.4/drivers/i2c/busses i2c-designware-platform.ko
(changer la version de votre noyau)
-
Copier le driver compilé dans la librairie des modules
cp i2c-designware-platform.ko /lib/modules/4.4.0-1-amd64/kernel/drivers/i2c/busses/i2c-designware-platform.ko
-
Générer le module
depmod -a 4.4.0-1-amd64
-
Rebooter.
A moitié satisfait seulement car c’est un hack qui risque de ne pas persister. A suivre…
Source:
https://bugzilla.redhat.com/show_bug.cgi?id=1275718#c7
PS: C’est plutôt compliqué d’insérer du code dans ce nouveau forum. Ou alors je suis aveugle!