http://launchpad.net/~dell-14z-15z lenovo-g550 lenovo-ideapad-u-series HP G60/G61/G70/G71 sony-vaio-nw-series HP dvxz

Thursday 31 December 2009

New Launchpad team: Lenovo IdeaPad U Series Linux team

A new launchpad team has been created for the Linux owners/developers of the Lenovo IdeaPad U series:
http://launchpad.net/~lenovo-ideapad-u-series

For people interested in having Linux 100% compatible on models like the Lenovo IdeaPad U330, IdeaPad U350, IdeaPad U450, IdeaPad U450p, IdeaPad U550, etc.

Some of the challenges for these laptops in Linux is to have switchable graphics working, i.e., the ability to switch on/off the discrete graphics card. By switching off the ATI card on the U330 model, the power consumption reduces from 23W to 13W.

Check out this package:
http://ljr.free.fr/archives/lenovo_u330/

Or simply manually install:

Makefile:
=====
ifneq ($(KERNELRELEASE),)
    obj-m := lenovo_acpi.o
else
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    PWD := $(shell pwd)


default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) $(EXTRA_FLAGS) modules

clean:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) $(EXTRA_FLAGS) clean

endif
=========

lenovo_acpi.c
======
/* Linux kernel module that disables the discrete graphics board for Lenovo
 * U330. Other lenovo laptops could work, but I don't know.
 *
 * Copyright (c) 2009: Sylvain Joyeux <sylvain.joyeux@m4x.org>
 */
#include <acpi/acpi.h>

MODULE_LICENSE("GPL");

static acpi_handle root_handle;

static int __init kill_ati(void)
{
    int i;
    acpi_status status;
    // The device handle
    acpi_handle handle;
    // The package elements
    union acpi_object package_elements[3];
    // The arguments to ATPX
    union acpi_object atpx_arg_elements[2];
    struct acpi_object_list atpx_arg;
    // For the return value of ATPX
    struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };

    status = acpi_get_handle(root_handle, "\\_SB_.PCI0.OVGA.ATPX", &handle);
    if (ACPI_FAILURE(status))
    {
        status = acpi_get_handle(root_handle, "\\_SB_.PCI0.OVGA.XTPX", &handle);
        if (ACPI_FAILURE(status))
        {
            printk("lenovo_acpi: cannot get ACPI handle: %s\n", acpi_format_exception(status));
            return -ENOSYS;
        }
        printk("lenovo_acpi: in discrete graphics mode\n");
        return 0;
    }

    for (i = 0; i < 3; ++i)
    {
        package_elements[i].type = ACPI_TYPE_INTEGER;
        package_elements[i].integer.value = 0;
    }

    atpx_arg.count = 2;
    atpx_arg.pointer = &atpx_arg_elements[0];

    atpx_arg_elements[0].type = ACPI_TYPE_INTEGER;
    atpx_arg_elements[0].integer.value = 2;

    atpx_arg_elements[1].type = ACPI_TYPE_PACKAGE;
    atpx_arg_elements[1].package.count = 3;
    atpx_arg_elements[1].package.elements = &package_elements[0];
   
    status = acpi_evaluate_object(handle, NULL, &atpx_arg, &buffer);
    if (ACPI_FAILURE(status))
    {
        printk("lenovo_acpi: ATPX method call failed: %s\n", acpi_format_exception(status));
        return -ENOSYS;
    }
    kfree(buffer.pointer);

    printk("lenovo_acpi: disabled the discrete graphics card\n");
    return 0;
}

static void dummy(void)
{
}

module_init(kill_ati);
module_exit(dummy);
===============


1 comment:

  1. Please post your Linux compatibility reviews for this product at http://ubuntuhcl.org/browse/product+lenovo-ideapad-u450?id=7229

    ReplyDelete

Followers