back to stevenf.com

A pet "evenings and weekends" project of mine for a while has been trying to get Mac OS X to run stably on an HP TC1100 tablet PC. I've had mixed luck, and so decided to start an entry on here to keep track of the various things I've tried that do and don't work -- mostly for my own reference, but just in case anyone else is searching for this type of information.

TC1100

Why do this?

Why not? The TC1100 is a lightweight (2.5 lbs lighter than the ModBook) slate tablet with a great form factor that's available secondhand relatively cheaply. In my opinion, it's the best industrial design of any Tablet PC ever made. Mac OS X is the world's best operating system. Seems like they deserve each other! Plus I love tinkering.

Specs

As with any Hackintosh, you have to know the specs of the system you're working with. Note that these are for the TC1100, not the older and less capable TC1000.

Distributions tried

JaS 10.4.6

With stock installation options, JaS 10.4.6 gets you a bootable 10.4.6 system with working graphics, sound, USB, and bluetooth. WiFi and tablet digitizer are non-functional. All other hardware untested. Power management does not seem to work as the system runs very hot with full fans after a few minutes, and no battery status indicator is present in the menu bar.

I chose only the "10.4.6 Combo Update" and "Intel SSE2" patches during install.

WiFi

Installing iwidarwin enabled WiFi, but it would only associate with a neighbor's un-passworded network. I could not get any other networks to even appear in the network list. Why it insisted on picking this network, I don't know, as the signal strength is very low, and thus it has very poor performance. But it was encouraging to see WiFi working at all.

I ended up using an AT&T USBConnect 881 cellular modem to get the tablet online, which installed and worked just as it would on a real Mac.

Tablet digitizer

There are two steps to getting the ISDV4 tablet digitizer to work. So far nobody, including myself, seems to have been able to get past step 1. An extensive thread covers the issues.

  1. The IONameMatch key in /System/Library/Extensions/Apple16X50Serial.kext/ Contents/PlugIns/Apple16X50ACPI.kext/Contents/Info.plist must be modified to match the hardware ID of the digitizer. The Wacom digitzer is on a serial (not USB!) connection to the board. The correct vendor ID for the TC1100 appears to be WACF005. Scott Lahteine maintains a script that attempts to make this modification for you.

  2. Install Scott's TabletMagic driver for serial-based Wacom tablets.

The problem with the TC1100 is that even though the modified kext detects the WACF005 device and attaches to it (confirmed via the kextstat command line tool), no new entry is created in /dev for the serial port.

Typically the 16X50 driver will add a /dev/cu.* or /dev/tty.* or /dev/serial0 access point for the port. No such luck here.

And without the serial port visible in /dev, TabletMagic will not work. So far, I've not heard of any TC1100 user successfully getting the digitizer to appear in /dev.

The biggest clue I've seen so far is this page which discusses getting Linux to recognize tablet PC digitizers. It says that by default, the UART controlling the digitizer often isn't mapped to a serial port. He shows a Linux command for making this happen: setserial /dev/ttyS2 port 0x93f8 autoconfig. What the Mac OS X equivalent to this would be, I haven't been able to figure out.

The article goes on to specifically mention the TC1100 and even shows some apparently HP-provided source code for enabling the digitizer before setserial is executed:

/*
 * HP TC1100 Touchscreen Enable
 * Copyright (c) 2004 Hewlett-Packard Co.
 *
 * Compile with `cc -O2 -o tc1100ts tc1100ts.c',
 * and run as root with `./tc1100ts'.
 *
 * This standalone program enables the Serial Port 1
 * (SP1) of the NS LPC Super I/O, where the Wacom
 * Digitizer is connected to on the HP TC1100 Tablet PC.
 *
 * The serial device is mapped to 0x3e8 IRQ0-4 to match
 * the default /dev/ttyS2 port and IRQ mapping on Linux.
 *
 * To proof that the Wacom Digitizer is enabled by this
 * standalone, do the following:
 * - Change to superuser mode, i.e. root
 * - setserial /dev/ttyS2
 *   it should return:
 *   /dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
 * - ./tc1100ts
 * - setserial /dev/ttyS2 autoconfig
 * - setserial /dev/ttyS2
 *   now returns:
 *   /dev/ttyS2, UART: 16550A, Port: 0x03e8, IRQ: 4
 *
 */

#include <stdio.h>
#include <unistd.h>
#include <sys/io.h>
#include <stdlib.h>

const int cfgindex = 0x4e;
const int cfgdata  = 0x4f;

#define wsio(i,d)  {outb(i,cfgindex); outb(d,cfgdata);}

int main()
{
  /* Get access to the ports */
  if (iopl(3)) {perror("iopl"); exit(1);}

  // See the SuperIO Specificatio for details of each register
  wsio(0x07,0x03); // Select Logical Device - Serial Port 1
  wsio(0x30,0x00); // De-activate Logical Device
  wsio(0x60,0x03); // I/O Port Base [15-08]
  wsio(0x61,0xe8); // I/O Port Base [07-00]
  wsio(0x70,0x14); // Enables Wake-up on IRQ4
  wsio(0x71,0x03); // Level IRQ Req, Hi priority
  wsio(0x74,0x04); // DMA Channel Select 0 - no DMA
  wsio(0x75,0x04); // DMA Channel Select 1 - no DMA
  wsio(0x30,0x01); // Activate Logical Device
 
  /* We don't need the ports anymore */
  if (iopl(0)) {perror("iopl"); exit(1);}

  exit(0);
}

/* end of tc1100ts.c */

To workaround the non-existence of iopl() on Mac OS X, I tried making a dummy KEXT that did nothing but issue those outb() commands when loaded, then loading the Apple16X50 KEXT. Unfortunately, I still didn't get a new serial port in /dev so I'm not sure what to try next.

Power Management

I've not yet begun to research how to fix this. Here's a big thread on the PowerManagement bundle

Other resources

Linux patches for enabling various TC1100 hardware, including RF and digitizer.