The SGS2 supports USB OTG which means it can play host to certain low-powered USB devices. Unfortunately the kernel is configured with a whitelist that means it will only connect to HIDs, printers, PTP cameras and mass storage devices.
I wanted to begin developing an application using custom (vendor specific) USB hardware and so started experimenting to see if it was possible. There is a full description of how I went about it on my blog. To summarise, one of the ways to enable vendor specific USB devices is to edit the file "drivers/usb/core/sec_whitelist.h" and add the following to both whitelist tables:
Code:
{ USB_DEVICE_INFO(0xff, 0x0, 0x0) }, /* vendor specific USB devices */
There are two reasons for this post, the first is to provide information to help others that may want to do the same thing. The second is to try and encourage kernel modders to include my changes (or disable the whitelists altogether) thereby providing application developers the means with which to communicate with custom hardware.
Regards,
Dan
Nice idea, I may be completely wrong, but if you remove the white list it, will accept other hardware? or is it dependant on it being there?
Sent from my GT-I9100 using Tapatalk
Does you also test Google ADK ??
Do you know if it would work with the S2 ?
@MacaronyMax: As I mentioned in my blog post, it is possible to disable the whitelist entirely via the kernel options which I assume would allow any device to connect, but I have not tested this and so am unsure.
@xlanhackerx: The ADK relies on accessories that have been designed to act as host and use an Android specific protocol, whereas I am interested in the SGS2 acting as host so that I can connect custom third-party slave devices to it. Therefore I have not looked at the ADK at all and I do not have the hardware available to even play with it.
Regards,
Dan
Thank you. Maybe a custom ROM has it built in?
Thank you so much terranim for this discovery, and for posting it.
I have been struggling on that for a week now, not understanding why my driver was apparently not even called.
I was thinking it could exist a ROM that has this whitelist removed... anyone has a clue? (Lite'ning 6.1 / ninphetamin 2.0.5 or .11 have is using sec_whitelist.h)
I don't think that any kernel developers have disabled this whitelist yet! However there is now another major problem: In the latest ROM from Samsung it is reported that they have removed the USB host related libraries in the Android SDK!
My hack to the kernel will still work and allow devices to be connected, but we will no longer be able to communicate with custom USB devices via an Android application (unless we write a C library to talk to the devices directly or via libusb).
Hopefully developers will restore these libraries in their own custom ROMS.
I guess I am not too far from running this whitelist with your new line on a home compiled version of ninphetamine... see http://forum.xda-developers.com/showpost.php?p=18123923&postcount=2828 and http://forum.xda-developers.com/showpost.php?p=18123923&postcount=2833
I just got to to compile completely a minute ago, and will test it on Thursday.
I think I will stick to custom ROMs / kernel now... and possibly some I compile myself.
Did you read about libftdi? That could help you. Also that Samsung removed USB API might not harm as long as you use a serial port created by the serialusb driver.
edit / ps: nice to work in a team
guys,
is there any chance this USB Host mode could work with a headphones USB DAC/Amp like the FiiO E7?
I really envy the iPod/Pad/Phone users and their ability to have pure sound of their devices while on the go. I know we have HDMI/MHL but sadly there are no headphones amps using this link
I would be interested in this as well.
it is correct that Samsung have removed the USB Host API,
As far as I can tell, they never intended to leave it there to begin with, but I do know that the particular API was introduced in API 11 (Honeycomb).
Sent from my GT-I9100 using Tapatalk
What kernel options are required for this and what is needed to test connectivity? I have an older Galaxy S device and I'm trying to reproduce what you've done here. I just got an ADK for christmas and I've been working with Cyanogenmod kernel source in an attempt to get things operating. From what I can see I need a kernel driver. It would appear that it's begining to recognize that *something* is plugged in, but it's not enumerating.
Anything you can show me would be helpful. What do you see in dmesg when ADK or any other device is connected?
Hi. I know this is an old thread but I want to know if there is some patch to enable USB DACs on the S2. I can not find anything that can enable this like the S3. If some one knows some thing please reply.
Thanks
it's possible to use modem 3g on usb ?(i'm not interested connecting by phone)
if yes, i will need a drivers?
if i connect usb modem 3g. can i make a call and sent sms? and what app i need to do it?
Funny you should ask, since I was just working on this yesterday...
I've got access to an AT&T USBConnect 881 made by Sierra Wireless that is well known for working on Linux platforms with either kppp or wvdial. I managed to compile the sierra.ko kernel module and it loads fine, detects the modem, and provides the necessary /dev/ttyUSB* interfaces. I have yet to test the "dialing" portion with pppd and the chatscript, but I can't imagine why it wouldn't work.
I'll probably work on it later today and will report back on progress. I don't know of an easy way to integrate the connectivity into the built-in Android system stuff, so for the time being it will all be done via command line with scripts.
There's a long thread in the OG Transformer forum. Whatever they're doing should most likely work (or not) on the Prime.
http://forum.xda-developers.com/showthread.php?t=1151097
so, can i use a usb Modem Huawei E398 4G LTE and it will be works?
agentdr8 said:
Funny you should ask, since I was just working on this yesterday...
I've got access to an AT&T USBConnect 881 made by Sierra Wireless that is well known for working on Linux platforms with either kppp or wvdial. I managed to compile the sierra.ko kernel module and it loads fine, detects the modem, and provides the necessary /dev/ttyUSB* interfaces. I have yet to test the "dialing" portion with pppd and the chatscript, but I can't imagine why it wouldn't work.
I'll probably work on it later today and will report back on progress. I don't know of an easy way to integrate the connectivity into the built-in Android system stuff, so for the time being it will all be done via command line with scripts.
Click to expand...
Click to collapse
I also have a usb modem I would like to use. Do you have any good links/guides on how to compile these modules? I have recently installed Ununtu on my laptop and would like to tinker with this. Thanks!
sajmon1983 said:
so, can i use a usb Modem Huawei E398 4G LTE and it will be works?
Click to expand...
Click to collapse
From what I can see in the running config of the current kernel, it looks like the USB driver for GSM and CDMA modems is already compiled in, and that driver includes support for the E398 according to this.
You'd probably want to search the net to see if there is a chatscript already written for that modem.
---------- Post added at 03:30 PM ---------- Previous post was at 03:18 PM ----------
Nico^APEX said:
I also have a usb modem I would like to use. Do you have any good links/guides on how to compile these modules? I have recently installed Ununtu on my laptop and would like to tinker with this. Thanks!
Click to expand...
Click to collapse
I usually start out by Googling the modem model and the word "linux", since Android is linux to some degree. Once you find out if others have tried it, you try and find which kernel module is needed to support that device. A lot of them are covered by the generic GSM/CDMA usb modem driver, which the TFP kernel should already have support for. Then it's just a matter of plugging it into the usb port, fire up a root shell either via adb or locally via Terminal Emulator/BTEP/ConnectBot and see if it will "dial" out to your cellular provider. Do a "man pppd" search for more info on that.
Unless you have a cross-compiling toolchain setup on your Ubuntu laptop, any kernel modules you build will not be of the proper architecture for the TFP. The modules need to be built for the ARM architecture, not x86. One of the easier ways to having an ARM-based environment to build modules is to run Ubuntu built for ARM on the TFP, and do your module compiling there. This thread shows how to get the running config and also some pointers on building more modules. To get Ubuntu running in a chroot environment on the TFP, look here.
Success!
After tinkering some with the chatscript, I was able to "dial" out on the USBConnect 881 to isp.cingular and browse the net.
If anyone is interested in either the sierra.ko, chatscript/providers file, or anything relating to this hit me up.
This is more of a developer question, but I'm too new to post there. I'm looking for a phone or tablet with a replaceable TI WL127x/8x wifi driver. Does the G9 have it as a loadable module (the usual file name for it would be tiwlan_drv.ko or wlan_drv.ko)? Or if it's built into the kernel, is it possible to replace the kernel?
Why?
Gen8 has the 1271 driver it is loaded as a module.
BTW sources are https://www.gitorious.org/archos/archos-gpl-gen8/trees/master/hardware/ti/wlan
BTW my guess is that gen9 also have a module. Sources will also be on the archos git.
Gen8 has already SDE released so you can install your own kernel. For gen9 it still has to be released, however there are ways to go around this. Look at posts from Letama.
Also of interest can be http://www.openaos.org
divx118
Yes, gen9 also have tiwlan_drv.ko as module (wl1283), source for both kernel and tiwlan are on Archos gitorious gits even though they are a bit old compared to released firmwares.
If you're interested in sde for gen9, look at my signature.
Thanks for confirming that.
As for why, I just happen to know something about the driver and was thinking about doing a little android driver work. Maybe a roaming speedup, or possibly power management improvements.
Allow me to jump in.
My A10.1IT runs UrukDroid 1.6.2 and is normally connected to the LAN. It has some external shares mounted (Samba/CIFS).
I've noticed on several occasions that, when I move the device to another location (where the LAN is not available) the device totally and completely locks up. The green light is lit, and stays lit. A hard reset is necessary.
Any ideas?
sciurius said:
Any ideas?
Click to expand...
Click to collapse
I'd suggest to report it to "UrukDroid troubles" thread and, at least, let them know what is logged into syslog (or how they call it).
I'm attempting to compile and load kernel modules to make my Nova-T Stick USB DVB-T dongle work with my TF201 Asus TFP. Any one have a step-by-step guide for doing this?
I first attempted to go down the cross-compile on ubuntu host machine, then I went to chrooted ubuntu on the target, now back to ubuntu host. I have managed to build a number of .ko's, and insmod'ed some of them on the TFP. When doing a lsmod, I get:
dib7000m 12318 0 - Live 0xbf1cc000
dib7000p 23027 0 - Live 0xbf1b9000
dvb_ttusb_budget 12571 0 - Live 0xbf11a000
dibx000_common 4990 2 dib7000m,dib7000p, Live 0xbf113000
dib0070 6585 0 - Live 0xbf0fc000
dvb_pll 7922 0 - Live 0xbf0cc000
dvb_core 77241 2 dib7000p,dvb_ttusb_budget, Live 0xbf0b7000
bcm4329 207334 0 - Live 0xbf082000
Click to expand...
Click to collapse
But when I plug in USB dongle, I don't get any dvb-usb messages in dmesg. Only the standard usb ones.
To compile them, I took the kernel from Asus website, built using prebuilt ARM cross-compiler from AOSP (make menuconfig, and then make modules).
Any ideas anyone?
More info
Also,
cat /proc/devices
Click to expand...
Click to collapse
gives me amoung other things: 212 DVB, which looks good to me. Just no dvb-usb messages in dmesg still.
Anyone have the ko's for all DVB tuners, and the correct order to insmod them? This will be useful for many people surely...
And yet more info
After inserting the USB Tuner into an Ubuntu laptop, I can see using lsmod that some modules used are dvb_usb_dib0700, and dvb_usb.
However when I build the Asus Kernel after changing the .config, I cannot for the life of me get these 2 missing ko's built. Any one know of the options required in make menuconfig to get this working?
solution
OK, I didn't realise that Remote Control stuff needs to be enabled (to get rc-core) in make menuconfig before stuff relating the USB DVB shows up. Now I've got my kernel modules.
Modprobe in chroot ubuntu doesn't seem to work, so I insmod a whole load of them in a certain order and finally the USB stick is recoginised as DVB-T.
Now for some reason I get ActivityManager: Segmentation Fault on my Prime when installing APKs from my host machine. Life is never easy...
More detail?
Hi
Thanks for posting this as I am interested in doing the same thing. Can you outline your process in a bit more detail so I could followsuit. Or maybe share the modules you created?
Thanks
robb001 said:
Hi
Thanks for posting this as I am interested in doing the same thing. Can you outline your process in a bit more detail so I could followsuit. Or maybe share the modules you created?
Thanks
Click to expand...
Click to collapse
I think I managed to build the kernel modules and insmod them in the end. If you plug tuner into a host machine and do an lsmod before and after, you will find the dependency order for all the kernel modules you need. You need to generate all of these .ko files and insmod all of them in exactly the correct order. Search through make menuconfig to find all the required modules components including any related remote control ones, general DVB and USB ones too. It is possible to do it this way using insmod.... however....
I also did it a different way in the end to get some other benefits. Build Cyanogenmod 10 from source, and modify the kernel (as before), and just boot this custom ROM with all the required ko's already in place - seems to be an easier path with more help available on forums etc...
After this you need to make sure that after you plug in the DVB adapter, you change the permissions of the dvb nodes to 777 (or similar) before you can use them from an app.
Good luck! It is all possible!
Thanks for your very prompt reply. I am fairly familiar with linux and command line but not heavily in to compiling modules and kernels.
barkside said:
You need to generate all of these .ko files and insmod all of them in exactly the correct order.
Click to expand...
Click to collapse
To do this don't I need to have the kernel sources, headers and some tools like "make" available and carry all of this out on the actual target hardware with the appropriate kernel version? I.e. not on a host machine?
barkside said:
I also did it a different way in the end to get some other benefits. Build Cyanogenmod 10 from source, and modify the kernel (as before), and just boot this custom ROM with all the required ko's already in place - seems to be an easier path with more help available on forums etc...
Click to expand...
Click to collapse
This sounds like a good way to go but first have to do the above generating of module files?
I think perhaps I need to do some more research on this subject.
robb001 said:
I.e. not on a host machine?
Click to expand...
Click to collapse
No you need to do it all on a host linux machine. Do do it with insmoding, you need to download the kernel from Asus for your corresponding target kernel version. This includes everything you need. Then you need to just enable the building of the new DVB stuff by modifying the kernel config (use make menuconfig), then build the kernel - this gives you a lot of stuff including the ko files.
robb001 said:
This sounds like a good way to go but first have to do the above generating of module files?
I think perhaps I need to do some more research on this subject.
Click to expand...
Click to collapse
More research is a good idea. It is not simple. But cyanogenmod has lots of help available - read its wiki on building from source etc. So to clarify - you either 1) build kernel modules when building the kernel and insmod them onto the target, or 2) build the entire CM10 source and flash this new custom ROM (which will be complete with the DVB stuff once you enable them in CM10 kernel config). Go with 2) and see how you get on.
Hi,
Firstly, installing desktop OS's of whatever sort on the Android version (YB1-X90F), insofar as anyone has managed it, is a completely different process and none of what follows is likely to be relevant.
Secondly, it should go without saying that any use of the linked ISO or the information in this post is entirely at your own risk.
There are several threads on xda and elsewhere dealing with attempts to install Linux on the Windows version of the Yoga Book (YB1-X91F). They're pretty consistent in terms of results, both with each other and my own attempts. I have tried the latest and previous LTS or main releases Debian, Ubuntu (all flavours), Mint and Fedora.
Between mine and others' attempts, most distros have the following working, using a Live ISO flashed to USB:
- Boot to desktop and successful install to eMMC
- Display
- Graphics pad responds to touches, but not aligned with screen rotation and probably in need of other calibration.
- USB, including ethernet-to-USB adapter
Some distros/versions additionally have:
- Touchscreen (only newer kernels, I think 4.13 onwards but definitely 4.15 onwards)
- Sound via HDMI
- Not sure about Bluetooth - possibly
The following didn't work with any distos/versions:
- A lot of the ACPI subsystem, meaning that some ICs (e.g. SD Card) don't receive power.
- Wifi
- SD Card
- Sound via headphones or speakers
- Halo Keyboard
- Touchscreen multitouch
- Battery gauge
- OS control of battery charger IC, though the IC sits in autonomous mode so the device still charges
- Display brightness adjustment (always set to max)
- Display auto-rotate
The Mint ISO linked at the end of this post has WiFi, the SD Card, two-finger right click and brightness adjustment working in addition to the OOTB functionality. I've made a lot of progress on the sound - the driver and codec load but it needs some configuration. I have read elsewhere that configuring this incorrectly can blow your speakers which is why I haven't tackled it yet.
The Halo keyboard doesn't work yet, so the Yoga Book can't be used in laptop mode for now. The only real barrier to using it in tablet mode is the lack of a functioning battery gauge. More on this below.
Instructions:
You will need a USB flash drive of at least 2GB, a USB keyboard and mouse and therefore a USB hub as well as a way of attaching it to the micro-usb port. I use an OTG adapter which came with a Samsung phone.
The touchscreen does not work when the Live ISO boots but it does work after installation.
Once Linux is installed on the eMMC, the firmware will boot to GRUB by default rather than Windows. To boot into Windows you have to enter the firmware menu. This should be easy to fix/reconfigure but I haven't got round to it yet. I need to get the volume and power keys working in GRUB first.
- Download the ISO from the link below and flash to USB. I use Etcher on MacOS which flashes in a dd-like manner (other tools make their own changes to the target drive to make it bootable - this isn't needed or desirable).
- Turn off hibernate, fast boot and secure boot in Windows. There are easily found guides on how to do this. It ought to be possible to retain secure boot but I have found doing so a real headache on other systems so didn't try in this case.
- Turn off any secure boot settings in the device firmware (access the menu by powering on with the volume up button pressed down).
- Using the firmware menu, boot from the flashed USB drive. When the desktop boots, use GParted to shrink the Windows partition, leaving at least 11GB (Mint says it needs 10.7GB). I've been messing around with Linux for months now on the YB and have found 11 enough.
- Run the desktop installer. At the partitioning menu, choose 'Something else'.
- Create a new Ext4 partition using all of the free space created previously and map it to '/'.
- Ignore any warnings about a swap partition. If you get stuck on a dialog about forcing a UEFI install, open a terminal and run 'killall ubiquity' then run the installer again with the network connection turned off. If the install doesn't work, you may have to risk the default 'Install Mint alongside Windows....' option. I have never had a problem with this, but I don't quite trust it, or indeed the installer in general.
- If you fail at the point of GRUB install, go back and start again with networking disabled.
- Just reboot as normal.
Changes from Stock ISO (probably not exhaustive)
- New ISO using 18.3 Cinnamon as a base using Cubic
- Updated, inc dist-upgrade as of 6 Sept 18
- Missing Broadcom firmware (for WiFi) added.
- Additions to /etc/skel/.config to put Mint into HiDPI mode
- Florence on screen keyboard added and loads on start
- Touchegg, which enables two-finger right click added and loads on start.
- LightDM settings changed to enable Florence and HiDPI
- Most importantly, a custom kernel (4.18.5) which is responsible for most of the above-OOTB functionality. Some of this is just about enabling the correct Atom ACPI ICs, other bits relate to load order (to get past the lack of brightness control).
Help!
- I really need some help with the battery gauge IC. For now, dmesg is the best bet but I'll follow up with another post with more detail.
- There are other things which need doing, e.g. the keyboard and finishing off the sound but these are relatively straightforward by comparison. The gauge/charger setup is the last low level thing not working.
Custom ISO:
This is my first post. I can't post links! Remove the spaces and ..... :
drive.google.com/ .... open? .... id=1-5vtnKAVpERmzTFIR3TGXe1DgvoFvehc
Help Needed - Battery Gauge/Charger
The issue
The following can be seen by running 'dmesg' after boot using the ISO in my first post, which uses a 4.18 kernel customised for the hardware in the Yoga Book.
The kernel attempts to load the driver for the TI bq24190 battery charger IC. I'm not yet able to post links so search for 'bq24190_charger.c' in the Linux kernel Github repo. The driver throws an error on boot when it hits this code at line 1640. It's expecting a 6 and it gets a 4, the value of BQ24190_REG_VPRS_PN_24190.
bq24190_charger.c
Code:
if (v != BQ24190_REG_VPRS_PN_24190 &&
v != BQ24190_REG_VPRS_PN_24192I) {
dev_err(bdi->dev, "Error unknown model: 0x%02x\n", v);
return -ENODEV;
}
If I remove this check altogether and re-compile the module then the driver proceeds to load but reports zeroes for all status values. It's not clear whether it is, in fact, the right chip and isn't talking to the rest of the hardware or it's simply the wrong driver.
However, at least removing this check allows the Whiskey Cove ACPI IC driver to get a bit further along. Search for 'intel_cht_int33fe.c' in the kernel source. Comments in this file (line 124) confirm that this IC is expected to be paired with a bq24190.
By adding in dmesg warnings and re-compiling the int33fe module I could see that when an unmodified bq24190 driver is used, i.e. the check above takes place and is failed, the int33fe driver fails its own check at line 138:
intel_cht_int33fe.c
Code:
regulator = regulator_get_optional(dev, "cht_wc_usb_typec_vbus");
if (IS_ERR(regulator)) {
ret = PTR_ERR(regulator);
return (ret == -ENODEV) ? -EPROBE_DEFER : ret;
}
regulator_put(regulator);
When I remove the check, it fails at the next check starting at line 145:
Code:
/* The FUSB302 uses the irq at index 1 and is the only irq user */
fusb302_irq = acpi_dev_gpio_irq_get(ACPI_COMPANION(dev), 1);
if (fusb302_irq < 0) {
if (fusb302_irq != -EPROBE_DEFER)
dev_err(dev, "Error getting FUSB302 irq\n");
return fusb302_irq;
}
I have tried various combinations of including the FUSB driver and dependencies as modules/built in but the result is the same. I also tried moving the FUSB check to after the code which tries to link up with the max17047 battery gauge IC, but this fails also.
Some owners of the Android version of the Yoga Book have posted files/screenshots on Telegram which indicate that a different charger, the bq25892 is used. As far as I know i2c devices are simply identified by the fact that they occupy a certain address on the bus. You can see in the datasheet for the bq24190 (sorry, no links!) on page 3 that it uses i2c address 6BH. The datasheet for the bq25890/2 shows on page 5 that the bq25892 also uses 6BH.
I don't know enough about i2c to know whether this is the issue, or how to point Linux to a different driver in the way that you might using a VIDID for a USB or PCI device? It would be really helpful if anybody could definitively confirm which chip we are dealing with.
Some final ACPI errors crop up towards the end of the dmesg output (I've cleared all the others) and I suspect that sorting this will clear them, as well as making the Yoga Book with Mint usable in Tablet mode.
Other things which need fixing:
- There are sound errors in the dmesg output but it also shows that the drivers and codec are loading properly. I can see all the devices which should be visible in amixer from the command line. Because getting the config wrong can blow speakers I've resisted tackling this until I've done further research but if anyone has a solution please let me know.
- Halo Keyboard. This needs either a kernel module to be written or a software layer which runs at least under X. I don't expect this to be hugely difficult - Linux can see the Halo as a wacom graphics pad and take input, albeit not deal with it properly yet. There's also a mystery, generic HID device which by process of elimination must be the button/backlight. However, the generic HID driver loads so it shouldn't be too hard to work out how to talk to it.
- I re-built the ISO using Cubic. When I have tried to make ISOs which use my custom kernel to boot the ISO itself, they don't work. I get garbled graphics and the boot stalls. This is why the touchscreen doesn't work when you live boot (which uses 4.10) but does when you install (because it uses 4.18). This ought not to be insurmountable but I haven't cracked it yet. I've tried doing it manually and using the Debian live-boot commands for both Debian/Ubuntu. Still no luck.
- Until I can get a custom ISO to boot from a custom kernel it won't be possible to install on the SD Card. Otherwise, there's no reason this shouldn't be possible.
- It should be possible to install to another USB device now, but I haven't tried yet. Make sure to use the disable MMC script on the desktop if you don't want to install Grub EFI on the eMMC. Ubuntu and derivatives ignore whatever you choose for this and just use the fist EFI partition they find. Amazingly this bug has been there since 2014!
- It ought to be possible to map the hardware buttons (volume, power) to specific keys in Grub, possibly using a locale. This would allow selections to be made without a keyboard.
android install
This might be related as I was just installing windows on Android version and now reverted back (https://forum.xda-developers.com/showpost.php?p=77556606&postcount=44), couple of observations that might help you: On android reinstall back it required to activate halo keyboard to get it working again, there was a phone code entered into the search bar to get it activated which triggered something called easyimage app. In android stock image you can actually find easyimage.zip which I guess is this "fake android update" to install the halo keyboard. Inside the zip are *.so libraries and some files related to halo keyboard and ink pen so you could try to play with those to get it working under classic Linux.
DNX mode allows to boot EFI via a USB cable &*fastboot (I guess windows version have also this as I activated it somewhere in BIOS?) so this can be also alternative version of booting an OS. IMHO Grub can also chainload iso image directly (I did it in past on normal PC, it was a couple of years ago so I can't find the guide to do it now) so in theory you can just place the Linux ISO image as a normal iso file on disk and tell GRUB to chainload that directly. Since it's possible to revert the Windows installation back to Android it might even be possible to dualboot. Android bootloader is also EFI based (kernelflinger) so you could also play with that. TWRP recovery image have full touch support for screen so that might be also a help when digging for configuration or extracting it from the sources.
intense.feel said:
...you can actually find easyimage.zip which I guess is this "fake android update" to install the halo keyboard. Inside the zip are *.so libraries and some files related to halo keyboard and ink pen so you could try to play with those to get it working under classic Linux.
Click to expand...
Click to collapse
This is really helpful, thank you. I'll have a look at what's there.
Still no progress with the battery gauge...
intense.feel said:
This might be related as I was just installing windows on Android version and now reverted back (https://forum.xda-developers.com/showpost.php?p=77556606&postcount=44), couple of observations that might help you: On android reinstall back it required to activate halo keyboard to get it working again, there was a phone code entered into the search bar to get it activated which triggered something called easyimage app. In android stock image you can actually find easyimage.zip which I guess is this "fake android update" to install the halo keyboard. Inside the zip are *.so libraries and some files related to halo keyboard and ink pen so you could try to play with those to get it working under classic Linux.
DNX mode allows to boot EFI via a USB cable &*fastboot (I guess windows version have also this as I activated it somewhere in BIOS?) so this can be also alternative version of booting an OS. IMHO Grub can also chainload iso image directly (I did it in past on normal PC, it was a couple of years ago so I can't find the guide to do it now) so in theory you can just place the Linux ISO image as a normal iso file on disk and tell GRUB to chainload that directly. Since it's possible to revert the Windows installation back to Android it might even be possible to dualboot. Android bootloader is also EFI based (kernelflinger) so you could also play with that. TWRP recovery image have full touch support for screen so that might be also a help when digging for configuration or extracting it from the sources.
Click to expand...
Click to collapse
I'm currently doing on that without the Hardware. my plan is to find the small / light weight linux kernel and port the driver of the HALO. I call this Project HALO port (not on github cuz I just gathering everything until I ready). right now I'm learning to compile the kernel because I never do that (3 years on linux xD). I hope soon I can figure out the protocol it did uses for the HALO (My guess is I2C/SMBus).
Update : I found someone on github just build custom Debian ISO to deploy on USB flash drive and be able to use HALO keyboard (A.K.A Yeti, based on Goodix gt9xx chip). This is his work on github
Woah this is amazing progress! I haven't been on the forums for a while; been working mostly on messing with Windows to make it more efficient and responsive lol.
jimnarey said:
The issue
The following can be seen by running 'dmesg' after boot using the ISO in my first post, which uses a 4.18 kernel customised for the hardware in the Yoga Book.
The kernel attempts to load the driver for the TI bq24190 battery charger IC. I'm not yet able to post links so search for 'bq24190_charger.c' in the Linux kernel Github repo. The driver throws an error on boot when it hits this code at line 1640. It's expecting a 6 and it gets a 4, the value of BQ24190_REG_VPRS_PN_24190.
bq24190_charger.c
Code:
if (v != BQ24190_REG_VPRS_PN_24190 &&
v != BQ24190_REG_VPRS_PN_24192I) {
dev_err(bdi->dev, "Error unknown model: 0x%02x\n", v);
return -ENODEV;
}
If I remove this check altogether and re-compile the module then the driver proceeds to load but reports zeroes for all status values. It's not clear whether it is, in fact, the right chip and isn't talking to the rest of the hardware or it's simply the wrong driver.
However, at least removing this check allows the Whiskey Cove ACPI IC driver to get a bit further along. Search for 'intel_cht_int33fe.c' in the kernel source. Comments in this file (line 124) confirm that this IC is expected to be paired with a bq24190.
By adding in dmesg warnings and re-compiling the int33fe module I could see that when an unmodified bq24190 driver is used, i.e. the check above takes place and is failed, the int33fe driver fails its own check at line 138:
intel_cht_int33fe.c
Code:
regulator = regulator_get_optional(dev, "cht_wc_usb_typec_vbus");
if (IS_ERR(regulator)) {
ret = PTR_ERR(regulator);
return (ret == -ENODEV) ? -EPROBE_DEFER : ret;
}
regulator_put(regulator);
When I remove the check, it fails at the next check starting at line 145:
Code:
/* The FUSB302 uses the irq at index 1 and is the only irq user */
fusb302_irq = acpi_dev_gpio_irq_get(ACPI_COMPANION(dev), 1);
if (fusb302_irq < 0) {
if (fusb302_irq != -EPROBE_DEFER)
dev_err(dev, "Error getting FUSB302 irq\n");
return fusb302_irq;
}
I have tried various combinations of including the FUSB driver and dependencies as modules/built in but the result is the same. I also tried moving the FUSB check to after the code which tries to link up with the max17047 battery gauge IC, but this fails also.
Some owners of the Android version of the Yoga Book have posted files/screenshots on Telegram which indicate that a different charger, the bq25892 is used. As far as I know i2c devices are simply identified by the fact that they occupy a certain address on the bus. You can see in the datasheet for the bq24190 (sorry, no links!) on page 3 that it uses i2c address 6BH. The datasheet for the bq25890/2 shows on page 5 that the bq25892 also uses 6BH.
I don't know enough about i2c to know whether this is the issue, or how to point Linux to a different driver in the way that you might using a VIDID for a USB or PCI device? It would be really helpful if anybody could definitively confirm which chip we are dealing with.
Some final ACPI errors crop up towards the end of the dmesg output (I've cleared all the others) and I suspect that sorting this will clear them, as well as making the Yoga Book with Mint usable in Tablet mode.
Other things which need fixing:
- There are sound errors in the dmesg output but it also shows that the drivers and codec are loading properly. I can see all the devices which should be visible in amixer from the command line. Because getting the config wrong can blow speakers I've resisted tackling this until I've done further research but if anyone has a solution please let me know.
- Halo Keyboard. This needs either a kernel module to be written or a software layer which runs at least under X. I don't expect this to be hugely difficult - Linux can see the Halo as a wacom graphics pad and take input, albeit not deal with it properly yet. There's also a mystery, generic HID device which by process of elimination must be the button/backlight. However, the generic HID driver loads so it shouldn't be too hard to work out how to talk to it.
- I re-built the ISO using Cubic. When I have tried to make ISOs which use my custom kernel to boot the ISO itself, they don't work. I get garbled graphics and the boot stalls. This is why the touchscreen doesn't work when you live boot (which uses 4.10) but does when you install (because it uses 4.18). This ought not to be insurmountable but I haven't cracked it yet. I've tried doing it manually and using the Debian live-boot commands for both Debian/Ubuntu. Still no luck.
- Until I can get a custom ISO to boot from a custom kernel it won't be possible to install on the SD Card. Otherwise, there's no reason this shouldn't be possible.
- It should be possible to install to another USB device now, but I haven't tried yet. Make sure to use the disable MMC script on the desktop if you don't want to install Grub EFI on the eMMC. Ubuntu and derivatives ignore whatever you choose for this and just use the fist EFI partition they find. Amazingly this bug has been there since 2014!
- It ought to be possible to map the hardware buttons (volume, power) to specific keys in Grub, possibly using a locale. This would allow selections to be made without a keyboard.
Click to expand...
Click to collapse
Not sure if you've seen, but this issue on the above GitHub project that has managed to get the battery gauge working says they're using the BQ27542.
https://github.com/jekhor/yogabook-linux-kernel/commit/f0b7662fa10f012410170c241a9fa91295f54dc1
Hi, I am the author of the repository mentioned above, https://github.com/jekhor/yogabook-linux. My linux porting efforts were focused at kernel, getting battery charger driver and halo keyboard working basically. So, this kernel supports the battery gauge, battery charger (with fast charging mode, yes!). For halo keyboard patch for the goodix touchscreen (touchpad really) kernel was needed, see the https://github.com/jekhor/yogabook-linux-kernel/commit/bd3a5953126fd87e4218550c5a31baafcdc60a38 commit. There is userspace keyboard driver in the Chromium OS which converts touchpad events into keypresses. Forked version suitable for build at GNU\Linux system is here: https://github.com/jekhor/chromiumos_touch_keyboard .
Some patches were accepted to the mainline Linux already:
0e116237aa42 extcon-intel-cht-wc: Make charger detection co-existing with OTG host mode (v5.1)
ff6cdfd71495 ACPI / x86: Make PWM2 device always present at Lenovo Yoga Book (v5.1)
236c765d6abc mfd: intel_soc_pmic_chtwc: Register LED child device (v5.2)
a72a1be0de71 extcon: intel-cht-wc: Enable external charger (v5.2)
Feel free to ask me about this work and to create github issues. This is my spare time project, so I will glad to see other developers connected.
nice project dude was trying it today and touchscreen works good so far,
but i cant get the halo keyboard to work, if i try to use it my mouse only moving from left to right and right to left.
if i can help you with creating some logs or something else, just write me i'm not rly good on linux, but i want to use it on this low power device
edit: and yes i tried to reload the kernel modules (if modprobe is the correct command) but no change
i dont know if the problem is maybe that i have a germany keyboard layout, changing in the menu works for my hw keyboard but on the halo no difference still only mouse movement
blgblade said:
nice project dude was trying it today and touchscreen works good so far,
but i cant get the halo keyboard to work, if i try to use it my mouse only moving from left to right and right to left.
if i can help you with creating some logs or something else, just write me i'm not rly good on linux, but i want to use it on this low power device
edit: and yes i tried to reload the kernel modules (if modprobe is the correct command) but no change
i dont know if the problem is maybe that i have a germany keyboard layout, changing in the menu works for my hw keyboard but on the halo no difference still only mouse movement
Click to expand...
Click to collapse
Hmmm... You are second people who reports such problem with this image. What YB version you have? I have YB1-X91L only.
Could you please post an output of the command 'sudo cat /sys/class/dmi/id/*' (use external keyboard for this)?
---------- Post added at 10:36 PM ---------- Previous post was at 10:30 PM ----------
Arghhh... I have lost one part of goodix touchscreen driver patch and keyboard will works only at YB1-X91L model (not X91F). Wil be fixed.
jekhor said:
Hmmm... You are second people who reports such problem with this image. What YB version you have? I have YB1-X91L only.
Could you please post an output of the command 'sudo cat /sys/class/dmi/id/*' (use external keyboard for this)?
---------- Post added at 10:36 PM ---------- Previous post was at 10:30 PM ----------
Arghhh... I have lost one part of goodix touchscreen driver patch and keyboard will works only at YB1-X91L model (not X91F). Wil be fixed.
Click to expand...
Click to collapse
yep i have a YB1-X91F
ok nice, than i will wait for the next release
i found out 2 things that did not work (or not correctly or i'm to stupid xD)
- sound (but i allready see the post in issues )
- the gui and if i tried video it looks like there is no graphic driver installed (dont know how to specify this, but if i just move a window it looks like software rendering, ok my english should be better to explain this but i hope you know what i mean ^^)
if i found something more i will give you feedback
but for now, its rly nice work
thank you so much for this project
here the output from the command above
Code:
08/26/2016
LENOVO
04WT18WW
NO Asset Tag
INVALID
HA0QPQ1T
LENOVO
Not Defined
NO Asset Tag
HA0QPQ1T
11
LENOVO
X91F
dmi:bvnLENOVO:bvr04WT18WW:bd08/26/2016:svnLENOVO:pnLenovoYB1-X91F:pvrX91F:rvnLENOVO:rnINVALID:rvrNotDefined:cvnLENOVO:ct11:cvrX91F:
cat: /sys/class/dmi/id/power: Is a directory
(TBD)
Lenovo YB1-X91F
HA0QPQ1T
LENOVO_BI_04_PCG_FM_YB1_X91F
41564e49-494c-0044-0000-000000000000
X91F
cat: /sys/class/dmi/id/subsystem: Is a directory
LENOVO
MODALIAS=dmi:bvnLENOVO:bvr04WT18WW:bd08/26/2016:svnLENOVO:pnLenovoYB1-X91F:pvrX91F:rvnLENOVO:rnINVALID:rvrNotDefined:cvnLENOVO:ct11:cvrX91F:
blgblade said:
yep i have a YB1-X91F
ok nice, than i will wait for the next release
i found out 2 things that did not work (or not correctly or i'm to stupid xD)
- sound (but i allready see the post in issues )
- the gui and if i tried video it looks like there is no graphic driver installed (dont know how to specify this, but if i just move a window it looks like software rendering, ok my english should be better to explain this but i hope you know what i mean ^^)
if i found something more i will give you feedback
but for now, its rly nice work
thank you so much for this project
[/CODE]
Click to expand...
Click to collapse
I have uploaded fixed iso (halo keyboard should work): https://github.com/jekhor/yogabook-linux/releases/tag/livecd-test3.1
Yes, no sound, no force-feedback for keypresses.
Don't know about video driver and acceleration, need to check.
jekhor said:
I have uploaded fixed iso (halo keyboard should work): https://github.com/jekhor/yogabook-linux/releases/tag/livecd-test3.1
....
Click to expand...
Click to collapse
yes, the keyboard is now working, nice thank you
i will follow your progress and try to help if i can ^^
hey all, because @jekhor is using a diffrent keyboard layout (not only mapping are diffrent) i created a modified layout.csv
(on this page --> https://forums.lenovo.com/t5/Yoga-Book-Windows/Yoga-book-Window-keyboard-layout-wrong/td-p/3705108 <-- you will see the layout diffrences)
layout.csv as attachmant (as txt because csv is not allowed ^^)
changes:
- Enter key diffrent size
- # moved to the other position
- added the > < | key (dont know the name )
- LeftShift key diffrent size
edit: i created a patch for the filesystem.squashfs file, just unpack the patcher in the /live/ folder on your stick and run it or run it ffrom any location you want and choose the live folder from the app, than you can use the keyboardlayout on the livesystem (sorry, the patcher is windows only)
Thanks for all the hard work
Hey all, just came across this thread recently - really appreciate all the hard work here. I've been trying to install Ubuntu on my Windows powered YogaBook since the beginning, and am amazed at how far your efforts have come. Looking forward to the completed product later on! Can't stand Win10 as it tends to bloat and slowdown. Hopefully Linux runs better on this thing.
Thxxx man
Love the level of involvement in this adforable and light device with great potential in linux
Hope u guys dont lose patience in the development.
Once the wifi, keyboard and touch screen is aredy, i think i will fully change my android yogabook into linux.......
---------- Post added at 02:01 PM ---------- Previous post was at 01:56 PM ----------
Love the level of involvement in this adforable and light device with great potential in linux
Hope u guys dont lose patience in the development.
Once the wifi, keyboard and touch screen is aredy, i think i will fully change my android yogabook into linux.......
Thanks for the effort
Thanks again, all for the effort.
Has there been any progress made so far?
It has been more than 2 full years, one in this forum has been able to achieve in only a few weeks of coding what MOST of us have tried to achieve in years. He has uploaded his ISO of Debian with many things working, however some things are left to be desired : Resume keyboard (tried with script - failed), fix for keyboard keys layout, and the resolution (worked with XRANDR script : working). However, he does not seem either interested in going further or does not have the device to compile against, either way without him we could be stuck with WinBlows on this machine. Until we get him BACK on board, we are stuck in the water... @jekhor ?
Jeff said:
It has been more than 2 full years, one in this forum has been able to achieve in only a few weeks of coding what MOST of us have tried to achieve in years. He has uploaded his ISO of Debian with many things working, however some things are left to be desired : Resume keyboard (tried with script - failed), fix for keyboard keys layout, and the resolution (worked with XRANDR script : working). However, he does not seem either interested in going further or does not have the device to compile against, either way without him we could be stuck with WinBlows on this machine. Until we get him BACK on board, we are stuck in the water... @jekhor ?
Click to expand...
Click to collapse
RN, I use the systemd to fix keyboard resume and very soon I will working on sound driver totally ported from android kernel. Plus I can get the haptic feedback to (partially) works only random left or right motor via using udev rule. Extra, the recent kernel added support for the front facing camera (ov2740).