In response to the ICS leak, I have abandoned this thread in favor of a different approach. I'm leaving it here purely for archival purposes.
I have something stewing. I'll make a thread when I'm ready.
Compiling a list of the drivers required and making sure we've got them all checked off; that's the first step to making an ICS port happen, right? I'm giving it the old gentleman try.
All input is nice; I'm a complete noob to kernel-level Android. I'm familiar with troubleshooting drivers on x86 but I don't know the buses and whatnot involved here.
KEY: RED == we don't know enough about the item to find/make an appropriate driver; YELLOW == enough info is available to write a driver but we haven't found/made one yet; GREEN == A driver that SHOULD work for ICS/JB is already available.
So, all the drivers we need:
Saving this and this for me to take a closer look at later.
Wikipedia claims we have a gyroscope a magnetometer HDMI... really? Can anyone confirm this? And what the heck is MHL? There *is* an interrupt mapped for it...
/proc/ioports revealed that we have a Broadcom BCM4330, which is a Wi-Fi plus Bluetooth plus goddamned FM RADIO all-in-one. It apparently can transmit in FM too. If that's actually hooked up to a usable antenna... holy ****.
Here's the raw /proc/interrupts, in case more enlightened eyes grace my presence:
NCT1008 is a temperature sensor. Battery temp, I'm guessing.
Here's /proc/ioports. Nothing too interesting.
I have something stewing. I'll make a thread when I'm ready.
Compiling a list of the drivers required and making sure we've got them all checked off; that's the first step to making an ICS port happen, right? I'm giving it the old gentleman try.
All input is nice; I'm a complete noob to kernel-level Android. I'm familiar with troubleshooting drivers on x86 but I don't know the buses and whatnot involved here.
KEY: RED == we don't know enough about the item to find/make an appropriate driver; YELLOW == enough info is available to write a driver but we haven't found/made one yet; GREEN == A driver that SHOULD work for ICS/JB is already available.
So, all the drivers we need:
- Video. Tegra 2 Ventana. Driver Available.
- Audio. Wolfson WM8994. Driver Available.
- Power/volume buttons. Dedicated interrupts. Even if a driver is not available, it should be trivial to do, unless I'm naive of some major ARM architecture quirk.
- Flash/microSD access. CWM can do this, so we know how to do it, but is there a 3.0 driver available or are we gonna need a kernel hacker?
- Cell radio. Appears to be a Samsung custom proprietary something or other, because they wrote their own damn driver for it. I'm gonna be digging through the Samsung source release for the kernel bits, but we have a big ugly problem in the form of two closed source binary blobs in the pipeline from Android to hardware named libsec-ril.so and libsecril-client.so. We need to either a) get the official blobs to somehow work correctly in the ICS/JB environment (potentially very hard), b) replace these blobs entirely (even harder), c) wait for official straight-from-Samsung ICS/JB versions (yeah, when's that happening again?) or d) substitutde official blobs from another phone (which is likely to not work at all).
- USB device mode. Fairchild FSA9480. Galaxy Nexus has the same chip so I'm going to assume a driver is available.
- Physical keyboard. Interrupt 215 is mapped to an "STMPE1801". A quick peek at the datasheet strongly suggests this is our keyboard controller. A datasheet is available, but I have yet to find evidence of a 3.0 driver. It may conform to some standard -- does anyone know more about this chip or ones like it?
- Touchscreen. Atmel MXT224. An official driver is available on GitHub.
- Cameras. Not yet identified. A simply stupid amount of V4L drivers are included in the GB kernel config.gz. Hunting down which ones are actually used may take some time. "CONFIG_TEGRA_CAMERA" looks promising though.
- Battery/Charger controller. /proc/interrupts shows a MAX8907C while dmesg shows a MAX8922. Both chips have appeared in devices that have officially gone ICS, so we should be good.
- Wi-Fi and Bluetooth. Broadcom BCM4330, a working driver is in the 3.0 kernel tree.
- GPS. The GB driver calls itself "gps_sirf" in logcat. Perhaps part of the SiRFstar family? Don't have anything more specific yet.
- Accelerometer. The MPU3050 gyroscope has a second I2C port for the express purpose of attaching an accelerometer to it. That port may be empty, or there may be an accelerometer there, and that accelerometer probably wouldn't need its own driver, but no guarantees; there's no easy way to tell until we've actually booted a kernel and seen what the MPU3050 driver gives us.
- Proximity and ambient light sensors. Capella CM3663. 3.0 driver is available.
- Compass/Orientation Sensor. Asahi Kasei AK8975. 3.0 driver is in the tree.
- Gyroscope. InvenSense MPU3050. A 2.6 driver is available; not sure about 3.0.
- MHL/HDMI. Yeah, you know what? I'll tackle that when I have everything else more-or-less working.
Saving this and this for me to take a closer look at later.
/proc/ioports revealed that we have a Broadcom BCM4330, which is a Wi-Fi plus Bluetooth plus goddamned FM RADIO all-in-one. It apparently can transmit in FM too. If that's actually hooked up to a usable antenna... holy ****.
Here's the raw /proc/interrupts, in case more enlightened eyes grace my presence:
Code:
CPU0 CPU1
36: 150598 0 PPI tegra-avp
46: 4943342 0 PPI mmc2
51: 305330 0 PPI mmc1
52: 11794 0 PPI tegra-otg, fsl-tegra-udc
53: 335496 0 PPI ehci_hcd:usb1
61: 0 0 PPI rpc-arbsema
63: 11198199 0 PPI mmc0
70: 7880675 0 PPI tegra-i2c
73: 9025413 0 PPI timer0
74: 3059444 0 PPI timer_lp2wake
77: 0 0 PPI spdif_out
85: 6188775 0 PPI tegra-i2c
86: 70301 0 PPI stat_mon_int
99: 0 0 PPI host_status
105: 598486 0 PPI tegradc.0
106: 0 0 PPI tegradc.1
116: 1104236 0 PPI tegra-i2c
118: 16978 0 PPI max8907c
124: 80 0 PPI tegra-i2c
136: 7 0 PPI dma_channel_0
137: 0 0 PPI dma_channel_1
138: 0 0 PPI dma_channel_2
139: 615533 0 PPI dma_channel_3
140: 385356 0 PPI dma_channel_4
141: 347 0 PPI dma_channel_5
142: 1283 0 PPI dma_channel_6
143: 0 0 PPI dma_channel_7
144: 0 0 PPI dma_channel_8
145: 0 0 PPI dma_channel_9
146: 0 0 PPI dma_channel_10
147: 0 0 PPI dma_channel_11
152: 0 0 PPI tegra_cpuidle_both_idle
153: 0 0 PPI tegra_cpuidle_tear_down_cpu1
169: 441390 0 syncpt disp0_a
173: 6 0 syncpt vi_isp_1
175: 3 0 syncpt vi_isp_3
178: 577637 0 syncpt 2d_0
180: 695 0 syncpt disp0_b
182: 1890786 0 syncpt 3d
192: 238662 0 GPIO mpuirq
215: 5942 0 GPIO stmpe1801
223: 223163 0 GPIO mxt224_ts
248: 0 0 GPIO mhl_int
261: 0 0 GPIO max17043 fuel alert
276: 454855 15 GPIO akm_int
281: 29 0 GPIO fsa9480 micro USB
305: 136 0 GPIO proximity_int
321: 114 0 GPIO KEY_VOLUMEUP
322: 114 0 GPIO KEY_VOLUMEDOWN
324: 1194 0 GPIO sec_touchkey
338: 0 0 GPIO bt_host_wake_irq_handler
357: 533 0 GPIO KEY_POWER
358: 0 0 GPIO nct1008
362: 1 0 GPIO cp_act
370: 44475 0 GPIO hst_wkp
371: 98 0 GPIO HALL
417: 4 12 max8907c max8907c-vchg_f
418: 4 12 max8907c usb_phy_vbus
438: 3607 5008 max8907c rtc-alarm0
IPI: 7366740 17570126
LOC: 16779564 13867086
Err: 0
NCT1008 is a temperature sensor. Battery temp, I'm guessing.
Here's /proc/ioports. Nothing too interesting.
Code:
00000000-00000000 : sim_det
0000004d-0000004d : bcm4330_nshutdown_gpio
00000073-00000073 : cp_on
00000080-00000080 : hsic_sus
00000083-00000083 : cp_req
00000085-00000085 : hsic_act
0000008c-0000008c : slv_wkp
00000091-00000091 : bcm4330_btwake_gpio
000000a8-000000a8 : hsic_en
000000a9-000000a9 : ap_act
000000aa-000000aa : cp_act
000000b1-000000b1 : bcm4330_nreset_gpio
000000b2-000000b2 : hst_wkp
000000b9-000000b9 : cp_rst
Last edited: