diff --git a/debian/changelog b/debian/changelog index f3c0464..a4c0162 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +applesmc-dkms (0.14.1ubuntu1) unstable; urgency=low + + * Add light_scale file so we can scale the value of the light sensors + + -- Alex Murray Sat, 10 Jan 2009 01:15:19 +1030 + applesmc-dkms (0.14.1) unstable; urgency=low * Add support for MacBook Air 2 diff --git a/usr/src/dkms_source_tree/applesmc.c b/usr/src/dkms_source_tree/applesmc.c index acd818f..ab10783 100644 --- a/usr/src/dkms_source_tree/applesmc.c +++ b/usr/src/dkms_source_tree/applesmc.c @@ -191,6 +191,12 @@ static DEFINE_MUTEX(applesmc_lock); */ static unsigned int key_at_index; +/* + * Light scale value - light sensor value is multiplied by this before + * returning to userspace + */ +static u8 light_scale = 1; + static struct workqueue_struct *applesmc_led_wq; /* @@ -577,6 +583,7 @@ static ssize_t applesmc_light_show(struct device *dev, int ret; u8 left = 0, right = 0; u8 buffer[10], query[6]; + u16 scaled_value; mutex_lock(&applesmc_lock); @@ -590,11 +597,13 @@ static ssize_t applesmc_light_show(struct device *dev, } ret = applesmc_read_key(LIGHT_SENSOR_LEFT_KEY, buffer, data_length); - left = buffer[2]; + scaled_value = (u16)buffer[2] * (u16)light_scale; + left = (scaled_value > 255 ? 255 : scaled_value); if (ret) goto out; ret = applesmc_read_key(LIGHT_SENSOR_RIGHT_KEY, buffer, data_length); - right = buffer[2]; + scaled_value = (u16)buffer[2] * (u16)light_scale; + right = (scaled_value > 255 ? 255 : scaled_value); out: mutex_unlock(&applesmc_lock); @@ -969,6 +978,24 @@ static ssize_t applesmc_key_at_index_store(struct device *dev, return count; } +static ssize_t applesmc_light_scale_show(struct device *dev, + struct device_attribute *attr, char *sysfsbuf) +{ + return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", light_scale); +} + +static ssize_t applesmc_light_scale_store(struct device *dev, + struct device_attribute *attr, const char *sysfsbuf, size_t count) +{ + mutex_lock(&applesmc_lock); + + light_scale = simple_strtoul(sysfsbuf, NULL, 10); + + mutex_unlock(&applesmc_lock); + + return count; +} + static struct led_classdev applesmc_backlight = { .name = "smc::kbd_backlight", .default_trigger = "nand-disk", @@ -1003,6 +1030,8 @@ static DEVICE_ATTR(key_at_index_data_length, 0444, applesmc_key_at_index_data_length_show, NULL); static DEVICE_ATTR(key_at_index_data, 0444, applesmc_key_at_index_read_show, NULL); +static DEVICE_ATTR(light_scale, 0644, + applesmc_light_scale_show, applesmc_light_scale_store); static struct attribute *key_enumeration_attributes[] = { &dev_attr_key_count.attr, @@ -1011,6 +1040,7 @@ static struct attribute *key_enumeration_attributes[] = { &dev_attr_key_at_index_type.attr, &dev_attr_key_at_index_data_length.attr, &dev_attr_key_at_index_data.attr, + &dev_attr_light_scale.attr, NULL };