From 162aafb1ed61fb4e46bc9e11e6654d1ac007a317 Mon Sep 17 00:00:00 2001 From: Bastien Dejean Date: Fri, 18 Aug 2023 13:43:13 +0200 Subject: [PATCH] Add support for the Elipsa 2E Closes #315. --- README.md | 1 + contrib/plato.sh | 30 +++++-- crates/core/src/battery/kobo.rs | 15 ++-- crates/core/src/device.rs | 19 ++++- crates/core/src/framebuffer/kobo1.rs | 103 ++++++++++++++++++----- crates/core/src/framebuffer/mxcfb_sys.rs | 26 ++++++ crates/core/src/frontlight/premixed.rs | 2 +- crates/plato/src/app.rs | 8 +- scripts/wifi-disable.sh | 39 ++++++--- scripts/wifi-enable.sh | 65 +++++++++----- 10 files changed, 230 insertions(+), 78 deletions(-) diff --git a/README.md b/README.md index b314bb2..7410e8a 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ Any 4.*X*.*Y* firmware, with *X* ≥ 6, will do. ## Supported devices +- *Elipsa 2E*. - *Clara 2E*. - *Libra 2*. - *Sage*. diff --git a/contrib/plato.sh b/contrib/plato.sh index 4f2a53d..b500aa7 100755 --- a/contrib/plato.sh +++ b/contrib/plato.sh @@ -14,14 +14,27 @@ export $(grep -sE '^(INTERFACE|WIFI_MODULE|DBUS_SESSION_BUS_ADDRESS|NICKEL_HOME| sync killall -TERM nickel hindenburg sickel fickel adobehost foxitpdf iink dhcpcd-dbus dhcpcd fmon > /dev/null 2>&1 -# Turn off the LEDs -# https://www.tablix.org/~avian/blog/archives/2013/03/blinken_kindle/ + +STANDARD_LEDS=0 LEDS_INTERFACE=/sys/devices/platform/pmic_light.1/lit -for ch in 3 4 5; do - echo "ch ${ch}" > "$LEDS_INTERFACE" - echo "cur 1" > "$LEDS_INTERFACE" - echo "dc 0" > "$LEDS_INTERFACE" -done +if [ -e /sys/class/leds/bd71828-green-led ] ; then + STANDARD_LEDS=1 + LEDS_INTERFACE=/sys/class/leds/bd71828-green-led +elif [ -e /sys/devices/platform/ntx_led/lit ] ; then + LEDS_INTERFACE=/sys/devices/platform/ntx_led/lit +fi + +# Turn off the LEDs +if [ "$STANDARD_LEDS" -eq 1 ] ; then + echo 0 > "$LEDS_INTERFACE" +else + # https://www.tablix.org/~avian/blog/archives/2013/03/blinken_kindle/ + for ch in 3 4 5; do + echo "ch ${ch}" > "$LEDS_INTERFACE" + echo "cur 1" > "$LEDS_INTERFACE" + echo "dc 0" > "$LEDS_INTERFACE" + done +fi # Remount the SD card read-write if it's mounted read-only grep -q ' /mnt/sd .*[ ,]ro[ ,]' /proc/mounts && mount -o remount,rw /mnt/sd @@ -55,6 +68,7 @@ if [ -e "$KOBO_TAG" ] ; then 383) PRODUCT_ID=0x4231 ;; # Sage 388) PRODUCT_ID=0x4234 ;; # Libra 2 386) PRODUCT_ID=0x4235 ;; # Clara 2E + 389) PRODUCT_ID=0x4236 ;; # Elipsa 2E *) PRODUCT_ID=0x6666 ;; esac @@ -69,7 +83,7 @@ export LD_LIBRARY_PATH="libs:${LD_LIBRARY_PATH}" if [ "$PLATO_SET_FRAMEBUFFER_DEPTH" ] ; then case "${PRODUCT}:${MODEL_NUMBER}" in - goldfinch:*|io:*|cadmus:*|europa:*|storm:*|frost:*|nova:*|snow:378|star:379) + condor:*|goldfinch:*|io:*|cadmus:*|europa:*|storm:*|frost:*|nova:*|snow:378|star:379) unset ORIG_BPP ;; *) diff --git a/crates/core/src/battery/kobo.rs b/crates/core/src/battery/kobo.rs index 31d302a..0bd5f3d 100644 --- a/crates/core/src/battery/kobo.rs +++ b/crates/core/src/battery/kobo.rs @@ -1,12 +1,13 @@ use std::fs::File; use std::path::Path; use std::io::{Read, Seek, SeekFrom}; -use anyhow::Error; +use anyhow::{Error, format_err}; use crate::device::CURRENT_DEVICE; use super::{Battery, Status}; -const BATTERY_INTERFACE_A: &str = "/sys/class/power_supply/mc13892_bat"; -const BATTERY_INTERFACE_B: &str = "/sys/class/power_supply/battery"; +const BATTERY_INTERFACES: [&str; 3] = ["/sys/class/power_supply/bd71827_bat", + "/sys/class/power_supply/mc13892_bat", + "/sys/class/power_supply/battery"]; const POWER_COVER_INTERFACE: &str = "/sys/class/misc/cilix"; const BATTERY_CAPACITY: &str = "capacity"; @@ -31,11 +32,9 @@ pub struct KoboBattery { impl KoboBattery { pub fn new() -> Result { - let base = if Path::new(BATTERY_INTERFACE_B).exists() { - Path::new(BATTERY_INTERFACE_B) - } else { - Path::new(BATTERY_INTERFACE_A) - }; + let base = Path::new(BATTERY_INTERFACES.iter() + .find(|bi| Path::new(bi).exists()) + .ok_or_else(|| format_err!("battery path missing"))?); let capacity = File::open(base.join(BATTERY_CAPACITY))?; let status = File::open(base.join(BATTERY_STATUS))?; let power_cover = if CURRENT_DEVICE.has_power_cover() { diff --git a/crates/core/src/device.rs b/crates/core/src/device.rs index 753cf7e..d695ffe 100644 --- a/crates/core/src/device.rs +++ b/crates/core/src/device.rs @@ -5,6 +5,7 @@ use crate::input::TouchProto; #[derive(Debug, Copy, Clone, Eq, PartialEq)] pub enum Model { + Elipsa2E, Clara2E, Libra2, Sage, @@ -40,6 +41,7 @@ pub enum Orientation { impl fmt::Display for Model { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { + Model::Elipsa2E => write!(f, "Elipsa 2E"), Model::Clara2E => write!(f, "Clara 2E"), Model::Libra2 => write!(f, "Libra 2"), Model::Sage => write!(f, "Sage"), @@ -194,6 +196,12 @@ impl Device { dims: (1072, 1448), dpi: 300, }, + "condor" => Device { + model: Model::Elipsa2E, + proto: TouchProto::MultiC, + dims: (1404, 1872), + dpi: 227, + }, _ => Device { model: if model_number == "320" { Model::TouchC } else { Model::TouchAB }, proto: TouchProto::Single, @@ -215,7 +223,8 @@ impl Device { Model::LibraH2O | Model::Sage | Model::Libra2 | - Model::Clara2E => FrontlightKind::Premixed, + Model::Clara2E | + Model::Elipsa2E => FrontlightKind::Premixed, _ => FrontlightKind::Standard, } } @@ -232,7 +241,7 @@ impl Device { pub fn has_gyroscope(&self) -> bool { matches!(self.model, Model::Forma | Model::Forma32GB | Model::LibraH2O | - Model::Elipsa | Model::Sage | Model::Libra2) + Model::Elipsa | Model::Sage | Model::Libra2 | Model::Elipsa2E) } pub fn has_page_turn_buttons(&self) -> bool { @@ -268,6 +277,7 @@ impl Device { pub fn mark(&self) -> u8 { match self.model { + Model::Elipsa2E => 11, Model::Clara2E => 10, Model::Libra2 => 9, Model::Sage | @@ -335,7 +345,7 @@ impl Device { Model::LibraH2O => 0, Model::AuraH2OEd2V1 | Model::Forma | Model::Forma32GB | - Model::Sage | Model::Libra2 => 1, + Model::Sage | Model::Libra2 | Model::Elipsa2E => 1, _ => 3, } } @@ -369,7 +379,8 @@ impl Device { match self.model { Model::LibraH2O => n ^ 1, Model::Libra2 | - Model::Sage => (6 - n) % 4, + Model::Sage | + Model::Elipsa2E => (6 - n) % 4, Model::Elipsa => (4 - n) % 4, _ => n, } diff --git a/crates/core/src/framebuffer/kobo1.rs b/crates/core/src/framebuffer/kobo1.rs index 679a118..2e1fabb 100644 --- a/crates/core/src/framebuffer/kobo1.rs +++ b/crates/core/src/framebuffer/kobo1.rs @@ -1,6 +1,6 @@ use std::ptr; use std::path::Path; -use std::io; +use std::io::{self, Write}; use std::fs::{OpenOptions, File}; use std::slice; use std::os::unix::io::AsRawFd; @@ -36,6 +36,7 @@ pub struct KoboFramebuffer1 { flags: u32, monochrome: bool, dithered: bool, + inverted: bool, transform: ColorTransform, set_pixel_rgb: SetPixelRgb, get_pixel_rgb: GetPixelRgb, @@ -84,6 +85,7 @@ impl KoboFramebuffer1 { flags: 0, monochrome: false, dithered: false, + inverted: false, transform: transform_identity, set_pixel_rgb, get_pixel_rgb, @@ -144,11 +146,14 @@ impl Framebuffer for KoboFramebuffer1 { let mark = CURRENT_DEVICE.mark(); let mut flags = self.flags; let mut monochrome = self.monochrome; + let mut dithered = self.dithered; let (update_mode, mut waveform_mode) = match mode { UpdateMode::Gui => (UPDATE_MODE_PARTIAL, WAVEFORM_MODE_AUTO), UpdateMode::Partial => { - if mark >= 7 { + if mark >= 11 { + (UPDATE_MODE_PARTIAL, HWTCON_WAVEFORM_MODE_GLR16) + } else if mark >= 7 { (UPDATE_MODE_PARTIAL, NTX_WFM_MODE_GLR16) } else if CURRENT_DEVICE.model == Model::Aura { flags |= EPDC_FLAG_USE_AAD; @@ -161,39 +166,84 @@ impl Framebuffer for KoboFramebuffer1 { monochrome = false; (UPDATE_MODE_FULL, NTX_WFM_MODE_GC16) }, - UpdateMode::Fast => (UPDATE_MODE_PARTIAL, NTX_WFM_MODE_A2), + UpdateMode::Fast => { + if mark >= 11 { + (UPDATE_MODE_PARTIAL, HWTCON_WAVEFORM_MODE_A2) + } else { + (UPDATE_MODE_PARTIAL, NTX_WFM_MODE_A2) + } + }, UpdateMode::FastMono => { - flags |= EPDC_FLAG_FORCE_MONOCHROME; - (UPDATE_MODE_PARTIAL, NTX_WFM_MODE_A2) + if mark >= 11 { + flags |= HWTCON_FLAG_FORCE_A2_OUTPUT; + (UPDATE_MODE_PARTIAL, HWTCON_WAVEFORM_MODE_A2) + } else { + flags |= EPDC_FLAG_FORCE_MONOCHROME; + (UPDATE_MODE_PARTIAL, NTX_WFM_MODE_A2) + } }, }; if monochrome { - if mark >= 7 { + if mark >= 11 { + if waveform_mode != HWTCON_WAVEFORM_MODE_A2 { + waveform_mode = NTX_WFM_MODE_DU; + dithered = true; + } + } else if mark >= 7 { if waveform_mode != NTX_WFM_MODE_A2 { waveform_mode = NTX_WFM_MODE_DU; - if !self.dithered { - flags |= EPDC_FLAG_USE_DITHERING_Y1; - } + dithered = true; } } else { waveform_mode = NTX_WFM_MODE_A2; } } - if mark >= 9 && flags & EPDC_FLAG_ENABLE_INVERSION != 0 { - if waveform_mode == NTX_WFM_MODE_GLR16 { - waveform_mode = NTX_WFM_MODE_GLKW16; - } else if waveform_mode == NTX_WFM_MODE_GC16 { - waveform_mode = NTX_WFM_MODE_GCK16; + if self.inverted { + if mark >= 11 { + if waveform_mode == HWTCON_WAVEFORM_MODE_GL16 { + waveform_mode = HWTCON_WAVEFORM_MODE_GLKW16; + } else if waveform_mode == NTX_WFM_MODE_GC16 { + waveform_mode = HWTCON_WAVEFORM_MODE_GCK16; + } + } else if mark >= 9 { + if waveform_mode == NTX_WFM_MODE_GLR16 { + waveform_mode = NTX_WFM_MODE_GLKW16; + } else if waveform_mode == NTX_WFM_MODE_GC16 { + waveform_mode = NTX_WFM_MODE_GCK16; + } } } - let result = if mark >= 7 { + let result = if mark >= 11 { + let mut dither_mode = 0; + + if dithered { + flags |= HWTCON_FLAG_USE_DITHERING; + if monochrome { + dither_mode = HWTCON_FLAG_USE_DITHERING_Y8_Y1_S + } else { + dither_mode = HWTCON_FLAG_USE_DITHERING_Y8_Y4_S; + } + } + + let update_data = HwtConUpdateData { + update_region: (*rect).into(), + waveform_mode, + update_mode, + update_marker, + flags, + dither_mode, + }; + unsafe { + send_update_v3(self.file.as_raw_fd(), &update_data) + } + } else if mark >= 7 { let mut quant_bit = 0; let mut dither_mode = EPDC_FLAG_USE_DITHERING_PASSTHROUGH; - if self.dithered { + if dithered { if monochrome { flags |= EPDC_FLAG_USE_DITHERING_Y1; } else if mode == UpdateMode::Partial || mode == UpdateMode::Full { @@ -202,7 +252,6 @@ impl Framebuffer for KoboFramebuffer1 { } } - let update_data = MxcfbUpdateDataV2 { update_region: (*rect).into(), waveform_mode, @@ -218,7 +267,7 @@ impl Framebuffer for KoboFramebuffer1 { send_update_v2(self.file.as_raw_fd(), &update_data) } } else { - if monochrome && !self.dithered { + if monochrome && !dithered { flags |= EPDC_FLAG_FORCE_MONOCHROME; } @@ -313,15 +362,25 @@ impl Framebuffer for KoboFramebuffer1 { } fn set_inverted(&mut self, enable: bool) { - if enable { - self.flags |= EPDC_FLAG_ENABLE_INVERSION; + if self.inverted == enable { + return; + } + self.inverted = enable; + if CURRENT_DEVICE.mark() < 11 { + if enable { + self.flags |= EPDC_FLAG_ENABLE_INVERSION; + } else { + self.flags &= !EPDC_FLAG_ENABLE_INVERSION; + } } else { - self.flags &= !EPDC_FLAG_ENABLE_INVERSION; + File::open("/proc/hwtcon/cmd").and_then(|mut file| { + file.write_all(if enable { b"night_mode 4" } else { b"night_mode 0" }) + }).map_err(|e| eprintln!("{:#?}", e)).ok(); } } fn inverted(&self) -> bool { - self.flags & EPDC_FLAG_ENABLE_INVERSION != 0 + self.inverted } fn set_monochrome(&mut self, enable: bool) { diff --git a/crates/core/src/framebuffer/mxcfb_sys.rs b/crates/core/src/framebuffer/mxcfb_sys.rs index 592a649..56fe1b3 100644 --- a/crates/core/src/framebuffer/mxcfb_sys.rs +++ b/crates/core/src/framebuffer/mxcfb_sys.rs @@ -8,6 +8,7 @@ const MAGIC: u8 = b'F'; ioctl_write_ptr!(send_update_v1, MAGIC, 0x2E, MxcfbUpdateDataV1); ioctl_write_ptr!(send_update_v2, MAGIC, 0x2E, MxcfbUpdateDataV2); +ioctl_write_ptr!(send_update_v3, MAGIC, 0x2E, HwtConUpdateData); ioctl_write_ptr!(wait_for_update_v1, MAGIC, 0x2F, u32); ioctl_readwrite!(wait_for_update_v2, MAGIC, 0x2F, MxcfbUpdateMarkerData); @@ -101,6 +102,17 @@ pub struct MxcfbUpdateDataV2 { pub alt_buffer_data: MxcfbAltBufferDataV2, } +#[repr(C)] +#[derive(Clone, Debug)] +pub struct HwtConUpdateData { + pub update_region: MxcfbRect, + pub waveform_mode: u32, + pub update_mode: u32, + pub update_marker: u32, + pub flags: libc::c_uint, + pub dither_mode: libc::c_int, +} + pub const WAVEFORM_MODE_AUTO: u32 = 0x101; pub const NTX_WFM_MODE_INIT: u32 = 0; @@ -139,3 +151,17 @@ pub const EPDC_FLAG_USE_DITHERING_PASSTHROUGH: libc::c_int = 0; // pub const EPDC_FLAG_USE_DITHERING_ATKINSON: libc::c_int = 2; pub const EPDC_FLAG_USE_DITHERING_ORDERED: libc::c_int = 3; // pub const EPDC_FLAG_USE_DITHERING_QUANT_ONLY: libc::c_int = 4; + +/* Mark 11 */ +pub const HWTCON_WAVEFORM_MODE_GL16 :u32 = 3; +pub const HWTCON_WAVEFORM_MODE_GLR16 :u32 = 4; +pub const HWTCON_WAVEFORM_MODE_REAGL :u32 = 4; +pub const HWTCON_WAVEFORM_MODE_A2 :u32 = 6; +pub const HWTCON_WAVEFORM_MODE_GCK16 :u32 = 8; +pub const HWTCON_WAVEFORM_MODE_GLKW16:u32 = 9; + +pub const HWTCON_FLAG_USE_DITHERING: libc::c_uint = 0x1; +pub const HWTCON_FLAG_FORCE_A2_OUTPUT: libc::c_uint = 16; + +pub const HWTCON_FLAG_USE_DITHERING_Y8_Y1_S: libc::c_int = 770; +pub const HWTCON_FLAG_USE_DITHERING_Y8_Y4_S: libc::c_int = 258; diff --git a/crates/core/src/frontlight/premixed.rs b/crates/core/src/frontlight/premixed.rs index e404d53..e69e6c0 100644 --- a/crates/core/src/frontlight/premixed.rs +++ b/crates/core/src/frontlight/premixed.rs @@ -12,7 +12,7 @@ const FRONTLIGHT_WHITE: &str = "/sys/class/backlight/mxc_msp430.0/brightness"; const FRONTLIGHT_ORANGE_A: &str = "/sys/class/backlight/tlc5947_bl/color"; // Libra H₂O, Clara HD, Libra 2 const FRONTLIGHT_ORANGE_B: &str = "/sys/class/backlight/lm3630a_led/color"; -// Sage, Libra 2, Clara 2E +// Sage, Libra 2, Clara 2E, Elipsa 2E const FRONTLIGHT_ORANGE_C: &str = "/sys/class/leds/aw99703-bl_FL1/color"; pub struct PremixedFrontlight { diff --git a/crates/plato/src/app.rs b/crates/plato/src/app.rs index c00fb95..912464d 100644 --- a/crates/plato/src/app.rs +++ b/crates/plato/src/app.rs @@ -44,7 +44,8 @@ use plato_core::context::Context; pub const APP_NAME: &str = "Plato"; const FB_DEVICE: &str = "/dev/fb0"; const RTC_DEVICE: &str = "/dev/rtc0"; -const TOUCH_INPUTS: [&str; 4] = ["/dev/input/by-path/platform-1-0038-event", +const TOUCH_INPUTS: [&str; 5] = ["/dev/input/by-path/platform-2-0010-event", + "/dev/input/by-path/platform-1-0038-event", "/dev/input/by-path/platform-1-0010-event", "/dev/input/by-path/platform-0-0010-event", "/dev/input/event1"]; @@ -52,8 +53,9 @@ const BUTTON_INPUTS: [&str; 4] = ["/dev/input/by-path/platform-gpio-keys-event", "/dev/input/by-path/platform-ntx_event0-event", "/dev/input/by-path/platform-mxckpd-event", "/dev/input/event0"]; -const POWER_INPUTS: [&str; 2] = ["/dev/input/by-path/platform-bd71828-pwrkey-event", - "/dev/input/by-path/platform-bd71828-pwrkey.4.auto-event"]; +const POWER_INPUTS: [&str; 3] = ["/dev/input/by-path/platform-bd71828-pwrkey.6.auto-event", + "/dev/input/by-path/platform-bd71828-pwrkey.4.auto-event", + "/dev/input/by-path/platform-bd71828-pwrkey-event"]; const KOBO_UPDATE_BUNDLE: &str = "/mnt/onboard/.kobo/KoboRoot.tgz"; diff --git a/scripts/wifi-disable.sh b/scripts/wifi-disable.sh index 35cfc17..a9555ce 100755 --- a/scripts/wifi-disable.sh +++ b/scripts/wifi-disable.sh @@ -1,14 +1,23 @@ #! /bin/sh -grep -q "^${WIFI_MODULE}\b" /proc/modules || exit 1 +POWER_TOGGLE=module +case "$WIFI_MODULE" in + moal) + POWER_TOGGLE=ntx_io + ;; + wlan_drv_gen4m) + POWER_TOGGLE=wmt + ;; +esac + +if [ "$POWER_TOGGLE" != wmt ]; then + grep -q "^${WIFI_MODULE}\b" /proc/modules || exit 1 +fi SCRIPTS_DIR=$(dirname "$0") PRE_DOWN_SCRIPT=$SCRIPTS_DIR/wifi-pre-down.sh [ -e "$PRE_DOWN_SCRIPT" ] && $PRE_DOWN_SCRIPT -HAS_SDIO_WIFI_PWR=1 -[ "$WIFI_MODULE" = moal ] && HAS_SDIO_WIFI_PWR=0 - killall -q udhcpc default.script wpa_cli -i "$INTERFACE" terminate @@ -17,16 +26,22 @@ ifconfig "$INTERFACE" down sleep 0.2 -rmmod "$WIFI_MODULE" - +[ "$POWER_TOGGLE" != wmt ] && rmmod "$WIFI_MODULE" [ "$WIFI_MODULE" = moal ] && rmmod mlan -if [ "$HAS_SDIO_WIFI_PWR" -eq 1 ]; then - rmmod sdio_wifi_pwr -else - # CM_WIFI_CTRL - ioctl -q -v 0 /dev/ntx_io 208 -fi +case "$POWER_TOGGLE" in + ntx_io) + # CM_WIFI_CTRL + ioctl -q -v 0 /dev/ntx_io 208 + ;; + wmt) + echo 0 > /dev/wmtWifi + ;; + module) + rmmod sdio_wifi_pwr + ;; +esac + POST_DOWN_SCRIPT=$SCRIPTS_DIR/wifi-post-down.sh [ -e "$POST_DOWN_SCRIPT" ] && $POST_DOWN_SCRIPT diff --git a/scripts/wifi-enable.sh b/scripts/wifi-enable.sh index b53bc7d..0fa3e9f 100755 --- a/scripts/wifi-enable.sh +++ b/scripts/wifi-enable.sh @@ -1,25 +1,50 @@ #! /bin/sh -grep -q "^${WIFI_MODULE}\b" /proc/modules && exit 1 +MODULE_PATH=/drivers/$PLATFORM/wifi +WPA_SUPPLICANT_DRIVER=wext +POWER_TOGGLE=module + +case "$WIFI_MODULE" in + moal) + WPA_SUPPLICANT_DRIVER=nl80211 + POWER_TOGGLE=ntx_io + ;; + wlan_drv_gen4m) + MODULE_PATH=/drivers/$PLATFORM/mt66xx + WPA_SUPPLICANT_DRIVER=nl80211 + POWER_TOGGLE=wmt + ;; +esac + +if [ "$POWER_TOGGLE" != wmt ]; then + grep -q "^${WIFI_MODULE}\b" /proc/modules && exit 1 +fi SCRIPTS_DIR=$(dirname "$0") PRE_UP_SCRIPT=$SCRIPTS_DIR/wifi-pre-up.sh [ -e "$PRE_UP_SCRIPT" ] && $PRE_UP_SCRIPT -HAS_SDIO_WIFI_PWR=1 -WPA_SUPPLICANT_DRIVER=wext - -if [ "$WIFI_MODULE" = moal ]; then - HAS_SDIO_WIFI_PWR=0 - WPA_SUPPLICANT_DRIVER=nl80211 -fi - -if [ "$HAS_SDIO_WIFI_PWR" -eq 1 ]; then - insmod /drivers/"$PLATFORM"/wifi/sdio_wifi_pwr.ko -else - # CM_WIFI_CTRL - ioctl -q -v 1 /dev/ntx_io 208 -fi +case "$POWER_TOGGLE" in + wmt) + insmod "$MODULE_PATH"/wmt_drv.ko + insmod "$MODULE_PATH"/wmt_chrdev_wifi.ko + insmod "$MODULE_PATH"/wmt_cdev_bt.ko + insmod "${MODULE_PATH}/${WIFI_MODULE}.ko" + echo 0xDB9DB9 > /proc/driver/wmt_dbg + echo 7 9 0 > /proc/driver/wmt_dbg + sleep 1 + echo 0xDB9DB9 > /proc/driver/wmt_dbg + echo 7 9 1 > /proc/driver/wmt_dbg + echo 1 > /dev/wmtWifi + ;; + ntx_io) + # CM_WIFI_CTRL + ioctl -q -v 1 /dev/ntx_io 208 + ;; + module) + insmod "$MODULE_PATH"/sdio_wifi_pwr.ko + ;; +esac COUNTRY_CODE=$(grep "^WifiRegulatoryDomain=" "/mnt/onboard/.kobo/Kobo/Kobo eReader.conf") if [ "$COUNTRY_CODE" ]; then @@ -36,19 +61,19 @@ fi if [ "$WIFI_MODULE" = moal ]; then WIFI_DEP_MODULE=mlan MODULE_PARAMETERS="${MODULE_PARAMETERS} mod_para=nxp/wifi_mod_para_sd8987.conf" - if [ -e /drivers/"${PLATFORM}/${WIFI_DEP_MODULE}".ko ]; then - insmod /drivers/"${PLATFORM}/${WIFI_DEP_MODULE}".ko + if [ -e /drivers/"${PLATFORM}/${WIFI_DEP_MODULE}.ko" ]; then + insmod /drivers/"${PLATFORM}/${WIFI_DEP_MODULE}.ko" else - insmod /drivers/"$PLATFORM"/wifi/"$WIFI_DEP_MODULE".ko + insmod "${MODULE_PATH}/${WIFI_DEP_MODULE}.ko" fi fi -if [ -e /drivers/"${PLATFORM}/${WIFI_MODULE}".ko ]; then +if [ -e /drivers/"${PLATFORM}/${WIFI_MODULE}.ko" ]; then # shellcheck disable=SC2086 insmod /drivers/"${PLATFORM}/${WIFI_MODULE}".ko$MODULE_PARAMETERS else # shellcheck disable=SC2086 - insmod /drivers/"$PLATFORM"/wifi/"$WIFI_MODULE".ko$MODULE_PARAMETERS + insmod "${MODULE_PATH}/${WIFI_MODULE}".ko$MODULE_PARAMETERS fi REM_TRIES=20 -- 2.51.2