samsung R530 - костыли

Стал, не так давно, обладателем сего девайса. Побаловавшись с идущим в комплекте седьмым басиком, занялся делом.
Дешевая и простенькая лошадка T4300, 3гига, 350 гектар. Естественно арч64 устанавливается влет.
Тачпад.
Установлен тачпад поддерживающий скролинг двумя пальцами. Ни халом, ни через настройки гнома скролинг не подхватился, и дабы не мудрствовать (все равно задаю еще параметры), оживляю опции скриптом в автозапуске
#!/bin/sh
#
# Use xinput --list-props 13 to extract data
#
ID=$(xinput list | grep "SynPS/2 Synaptics TouchPad" | awk {'print $6'} | sed -e 's/id=//g')
# Set multi-touch emulation parameters
xinput set-int-prop ${ID} "Synaptics Two-Finger Pressure" 32 10
xinput set-int-prop ${ID} "Synaptics Two-Finger Width" 32 8
xinput set-int-prop ${ID} "Two-Finger Scrolling" 8 1
xinput set-int-prop ${ID} "Synaptics Two-Finger Scrolling" 8 1 1
# Disable edge scrolling
xinput set-int-prop ${ID} "Synaptics Edge Scrolling" 8 0 0 0 
# This will make cursor not to jump if you have two fingers on the touchpad and you list one
# (which you usually do after two-finger scrolling)
xinput set-int-prop ${ID} "Synaptics Jumpy Cursor Threshold" 32 110

Функциональные клавиши.
Работают через одну. Регулировка громкости. отключение тачпада - да. Яркость и отключение wi-fi - нет. Яркость так-же не регулируется апплетом “Апплет управления яркостью” и прямым указанием уровня в /sys/…
Вещь нужная - поставил костыль. Измененный модуль samsung-laptop (добавил поддержку R530/R730)
samsung-laptop.c
/*
 * Samsung N130 and NC10 Laptop Backlight driver
 *
 * Copyright (C) 2009 Greg Kroah-Hartman ([email protected])
 * Copyright (C) 2009 Novell Inc.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published by
 * the Free Software Foundation.
 *
 */
/*
 *  Support of laptops is added R530/R730
 * 	07.03.2010 w00zy (c) [email protected]
 *
 */
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/backlight.h>
#include <linux/fb.h>
#include <linux/dmi.h>
#define MAX_BRIGHT	0x07
#define OFFSET		0xf4
/*
 * HAL/gnome-display-manager really wants us to only set 8 different levels for
 * the brightness control.  And since 256 different levels seems a bit
 * overkill, that's fine.  So let's map the 256 values to 8 different ones:
 *
 * userspace	 0    1    2    3    4    5    6    7
 * hardware	31   63   95  127  159  195  223  255
 *
 * or hardware = ((userspace + 1) * 32)-1
 *
 * Note, we keep value 0 at a positive value, otherwise the screen goes
 * blank because HAL likes to set the backlight to 0 at startup when there is
 * no power plugged in.
 */
static int offset = OFFSET;
module_param(offset, int, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(offset, "The offset into the PCI device for the brightness control");
static struct pci_dev *pci_device;
static struct backlight_device *backlight_device;
static u8 read_brightness(void)
{
	u8 kernel_brightness;
	u8 user_brightness = 0;
	pci_read_config_byte(pci_device, offset, &kernel_brightness);
	user_brightness = ((kernel_brightness + 1) / 32) - 1;
	return user_brightness;
}
static void set_brightness(u8 user_brightness)
{
	u16 kernel_brightness = 0;
	kernel_brightness = ((user_brightness + 1) * 32) - 1;
	pci_write_config_byte(pci_device, offset, (u8)kernel_brightness);
}
static int get_brightness(struct backlight_device *bd)
{
	return bd->props.brightness;
}
static int update_status(struct backlight_device *bd)
{
	set_brightness(bd->props.brightness);
	return 0;
}
static struct backlight_ops backlight_ops = {
	.get_brightness	= get_brightness,
	.update_status	= update_status,
};
static int __init dmi_check_cb(const struct dmi_system_id *id)
{
	printk(KERN_INFO KBUILD_MODNAME ": found laptop model '%s'\n",
		id->ident);
	return 0;
}
static struct dmi_system_id __initdata samsung_dmi_table[] = {
	{
		   .ident = "R530/R730",
		   .matches = {
				   DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
				   DMI_MATCH(DMI_PRODUCT_NAME, "R530/R730"),
				   DMI_MATCH(DMI_BOARD_NAME, "R530/R730"),
		   },
		   .callback = dmi_check_cb,
	},
	{
		.ident = "N120",
		.matches = {
			DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
			DMI_MATCH(DMI_PRODUCT_NAME, "N120"),
			DMI_MATCH(DMI_BOARD_NAME, "N120"),
		},
		.callback = dmi_check_cb,
	},
	{
		.ident = "N130",
		.matches = {
			DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
			DMI_MATCH(DMI_PRODUCT_NAME, "N130"),
			DMI_MATCH(DMI_BOARD_NAME, "N130"),
		},
		.callback = dmi_check_cb,
	},
	{
		.ident = "NC10",
		.matches = {
			DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
			DMI_MATCH(DMI_PRODUCT_NAME, "NC10"),
			DMI_MATCH(DMI_BOARD_NAME, "NC10"),
		},
		.callback = dmi_check_cb,
	},
	{
		.ident = "NP-Q45",
		.matches = {
			DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
			DMI_MATCH(DMI_PRODUCT_NAME, "SQ45S70S"),
			DMI_MATCH(DMI_BOARD_NAME, "SQ45S70S"),
		},
		.callback = dmi_check_cb,
	},
	{ },
};
static int __init samsung_init(void)
{
	if (!dmi_check_system(samsung_dmi_table))
		return -ENODEV;
	/*
	 * The Samsung N120, N130, and NC10 use pci device id 0x27ae, while the
	 * NP-Q45 uses 0x2a02.  Odds are we might need to add more to the
	 * list over time... Samsung R530/R730 0x2a42
	 */
	pci_device = pci_get_device(PCI_VENDOR_ID_INTEL, 0x27ae, NULL);
	if (!pci_device) {
		pci_device = pci_get_device(PCI_VENDOR_ID_INTEL, 0x2a02, NULL);
		if (!pci_device) {
			pci_device = pci_get_device(PCI_VENDOR_ID_INTEL, 0x2a42, NULL);
			if (!pci_device)
				return -ENODEV;
		}
	}
	/* create a backlight device to talk to this one */
	backlight_device = backlight_device_register("samsung",
						     &pci_device->dev,
						     NULL, &backlight_ops);
	if (IS_ERR(backlight_device)) {
		pci_dev_put(pci_device);
		return PTR_ERR(backlight_device);
	}
	backlight_device->props.max_brightness = MAX_BRIGHT;
	backlight_device->props.brightness = read_brightness();
	backlight_device->props.power = FB_BLANK_UNBLANK;
	backlight_update_status(backlight_device);
	return 0;
}
static void __exit samsung_exit(void)
{
	backlight_device_unregister(backlight_device);
	/* we are done with the PCI device, put it back */
	pci_dev_put(pci_device);
}
module_init(samsung_init);
module_exit(samsung_exit);
MODULE_AUTHOR("Greg Kroah-Hartman <[email protected]>");
MODULE_DESCRIPTION("Samsung Backlight driver");
MODULE_LICENSE("GPL");
MODULE_ALIAS("dmi:*:svnSAMSUNGELECTRONICSCO.,LTD.:pnN120:*:rnN120:*");
MODULE_ALIAS("dmi:*:svnSAMSUNGELECTRONICSCO.,LTD.:pnN130:*:rnN130:*");
MODULE_ALIAS("dmi:*:svnSAMSUNGELECTRONICSCO.,LTD.:pnNC10:*:rnNC10:*");
MODULE_ALIAS("dmi:*:svnSAMSUNGELECTRONICSCO.,LTD.:pnSQ45S70S:*:rnSQ45S70S:*");
MODULE_ALIAS("dmi:*:svnSAMSUNGELECTRONICSCO.,LTD.:pnR530:*:rnR530:*");
MODULE_ALIAS("dmi:*:svnSAMSUNGELECTRONICSCO.,LTD.:pnR530/R730:*:rnR530/R730:*");

Makefile
ifneq ($(KERNELRELEASE),)
obj-m := samsung-laptop.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

Сборка
make -C /usr/src/linux-`uname -r` SUBDIRS=$PWD modules modules_install
Скомпилированный модуль скопировать в /lib/modules/`uname -r`/kernel/drivers/platform/x86 , сделать depmod -a, подгрузить и посмотреть dmesg - “samsung_laptop: found laptop model ‘R530/R730’ уже удачно. Должно появится устройство /sys/class/backlight/samsung Меняя значение /sys/class/backlight/samsung/brightness от 1 до 7 яркость должна изменяться.
Осталось оповестить остальные гномо-кеды.
В строке параметров ядра ( в menu.lst груба) добавим ” acpi_backlight=vendor" и после перезагрузке софт регулирует яркость. Клавиши, к сожалению, так и не заработают - надо копать глубже. Не хочу.
На сегодня, новостей больше нет (с) (И.Демидов)
Простите, а не было ли проблем с интернетом при установке? Приобрёл сходную машинку, установил арч 2010.05 х86-64, при попытке подключться пишет что-то вроде “network is unreachable”, попытка рестарта (/etc/rc.d/network restart) показала следующее:
  • ::Stopping network
    siocdelrt: no such process

    ::Starting network
    siocaddrt: no such process


    Перезагрузка не помогла, переустановка - тоже.
rc.conf свой покажите
malchun
Простите, а не было ли проблем с интернетом при установке?
Нет. Железо оч.хор. поддерживаемое. Смотрите свои конфиги.
 -> lspci
......................
02:00.0 Network controller: Atheros Communications Inc. AR9285 Wireless Network Adapter (PCI-Express) (rev 01)
04:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8040 PCI-E Fast Ethernet Controller

Кстати, слегка обновлю первый пост.

Подсветка. Доработанный модуль можно взять https://sourceforge.net/projects/staybo … 2/download
В грубе параметры ядра добавить
acpi_enforce_resources=lax acpi_osi=Linux acpi_backlight=vendor video=1366x768
заодно и укажет режим для видео (интел)

Горячии клавиши.
/etc/rc.local
# rc.local
#
echo 130,131,132,134,136,137,177,179,247,249 > /sys/devices/platform/i8042/serio0/force_release
setkeycodes e002 227   # Fn+F4 maps to switchvidmode
setkeycodes e003 236   # Fn+F2 maps to battery
setkeycodes e004 148   # Fn+F5 maps to prog1
setkeycodes e006 238   # Fn+F9 maps to wlan
setkeycodes e008 225   # Fn+Up maps to brightnessup
setkeycodes e009 224   # Fn+Dn maps to brightnessdown
setkeycodes e031 149   # Fn+F7 maps to prog2
setkeycodes e033 202   # Fn+F8 maps to prog3
setkeycodes e077 191   # Fn+F10 maps to F21 whenever the touchpad is enabled
setkeycodes e079 192   # Fn+F10 maps to F22 whenever the touchpad is disabled

/etc/udev/rules.d/75-keymap.rules
#/etc/udev/rules.d/75-keymap.rules
ACTION=="remove", GOTO="keyboard_end"
SUBSYSTEM!="input", GOTO="keyboard_end"
KERNEL!="event[0-9]*", GOTO="keyboard_end"
DRIVERS!="atkbd", GOTO="keyboard_end"
ENV{DMI_VENDOR}="$attr{[dmi/id]sys_vendor}"
ENV{DMI_VENDOR}=="", GOTO="keyboard_end"
ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="*R530/R730*", RUN+="/lib/udev/keymap $name /lib/udev/keymaps/samsung-other"
LABEL="keyboard_end"

Тачпад - включаем скролл двумя пальцами
/etc/udev/rules.d/75-synaptics.rules
#/etc/udev/rules.d/75-synaptics.rules
ACTION!="add|change", GOTO="xorg_synaptics_hubi_end"
KERNEL!="event[0-9]*", GOTO="xorg_synaptics_hubi_end"
ATTRS{protocol}!="SynPS/2", GOTO="xorg_synaptics_hubi_end"
#KERNEL=="event[0-9]*", SUBSYSTEM=="input", ATTRS{protocol}=="SynPS/2", SYMLINK+="input/synaptics"
ATTR{device/name}=="*SynPS/2*", ENV{x11_driver}="synaptics", ENV{x11_options.SHMConfig}="On", ENV{x11_options.TapButton1}="1", ENV{x11_options.TapButton2}="2", ENV{x11_options.TapButton3}="3", ENV{x11_options.ClickFinger1}="1", ENV{x11_options.ClickFinger2}="2",ENV{x11_options.ClickFinger3}="0", ENV{x11_options.VertEdgeScroll}="0", ENV{x11_options.HorizEdgeScroll}="0", ENV{x11_options.VertTwoFingerScroll}="1", ENV{x11_options.HorizTwoFingerScroll}="1", ENV{x11_options.JumpyCursorThreshold}="90", ENV{x11_options.EmulateTwoFingerMinZ}="20", ENV{x11_options.TouchpadOff}="0", ENV{x11_options.GuestMouseOff}="0", SYMLINK+="input/synaptics"
LABEL="xorg_synaptics_hubi_end"

/etc/X11/xorg.conf.d/10-synaptics.conf
Section "InputClass"
	Identifier "touchpad"
	Driver "synaptics"
	MatchIsTouchpad "on"
	Option "Device" "/dev/input/synaptics"
	Option "SHMConfig" "on"
	Option "TapButton1" "1"
	Option "TapButton2" "2"
	Option "TapButton3" "3"
	Option "ClickFinger1" "1"
	Option "ClickFinger2" "2"
	Option "ClickFinger3" "0"
	Option "VertEdgeScroll" "0"
	Option "HorizEdgeScroll" "0"
	Option "VertTwoFingerScroll" "1"
	Option "HorizTwoFingerScroll" "1"
	Option "JumpyCursorThreshold" "90"
	Option "EmulateTwoFingerMinZ" "20"
	Option "TouchpadOff" "0"
	Option  "FingerLow" "25"    # pressure below this level triggers release
	Option "FingerHigh" "30"    # pressure above this level triggers touch
	Option "GuestMouseOff" "0"
EndSection

ЭЭЭЭЭ,вроде все.
Ясно. Значит проблема в конфигах. Спасибо за ответ.

to kirpichPDA
К сожалению не могу, так как интернет не поднялся вместе с сетью, пришлось временно ставить убунту. Если вы имеете предположения по поводу данной ошибки, прошу указать сейчас, так как вскоре будет вторая попытка установки. Заранее спасибо.
Можете добавить поддержку r519?
	      {
         .ident = "R519/R719",
         .matches = {
               DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
               DMI_MATCH(DMI_PRODUCT_NAME, "R519/R719"),
               DMI_MATCH(DMI_BOARD_NAME, "R519/R719"),
         },
         .callback = dmi_check_cb,
   },

Также ваш модуль не собирается на 2.6.34, там изменена ф-я extern struct backlight_device *backlight_device_register(const char *name, struct device *dev, void *devdata, const struct backlight_ops *ops, const struct backlight_properties *props);
 
Зарегистрироваться или войдите чтобы оставить сообщение.