Build-a-Driver #1: Probe


Here's the first patch in the Build-a-Driver series for MCP9808.

(If this post seems out of context, please refer to "Build-a-Driver Introduction" post.)

mcp9808: this version probes and checks product id only.

This is a mimimal driver that only performs a probe.  The probe goes out to the device and confirms is it an MCP9808.

The MCP9808 info is dev_info'd as below. Not clear that is something that will stay in the driver, but it was how I verified we have an MCP9808 at probe time.  As I get further in the driver I suspect there may be some other device initialization to do at probe time.

dmesg:
[142059] mcp9808 7-0018: MCP9808 Temperature Sensor
[142071] mcp9808 7-0018: MCP9808 Manuf_id: 0x54, Device_id: 0x04, Rev: 0x0
[142282] i2c i2c-7: new_device: Instantiated device mcp9808 at 0x18

Note, that even though I don't define any channels, some sysfs stuff is set up:

/sys/bus/iio/devices/iio:device0$ ls
dev  in_temp_raw  name  power  subsystem  uevent

/sys/bus/iio/devices/iio:device0$ cat name dev
mcp9808
251:0

/sys/bus/iio/devices/iio:device0$ cat uevent
MAJOR=251
MINOR=0
DEVNAME=iio:device0
DEVTYPE=iio_device

/sys/bus/iio/devices/iio:device0$ ls power
async                               runtime_active_kids  runtime_status
autosuspend_delay_ms  runtime_active_time  runtime_suspended_time
control                            runtime_enabled        runtime_usage

Verified that iio:device0 was removed from /sys/bus/iio/devices/ when I pulled cable.  

Finally, the fun stuff: indio_dev really needs that info field defined.  Watch for my blog post on my first (and second) kernel oops.

This version mcp9808-probe.c
To view complete revision history go here.


Labels: , ,