From a00abae94f11bbd5672330c637882cf2f228cd04 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Thu, 7 Nov 2013 11:08:58 +0100 Subject: [PATCH] kernel-rpi: update to git commit 350ee7b (3.10.18 bump). --- .../kernel-rpi/patches/0001-rtc-pcf8523.patch | 387 ------------------ .../0002-pcf8523-i2c-register-dt.patch | 42 -- ...set-resume-quirk-for-several-webcams.patch | 98 ----- srcpkgs/kernel-rpi/template | 24 +- 4 files changed, 7 insertions(+), 544 deletions(-) delete mode 100644 srcpkgs/kernel-rpi/patches/0001-rtc-pcf8523.patch delete mode 100644 srcpkgs/kernel-rpi/patches/0002-pcf8523-i2c-register-dt.patch delete mode 100644 srcpkgs/kernel-rpi/patches/usb-add-reset-resume-quirk-for-several-webcams.patch diff --git a/srcpkgs/kernel-rpi/patches/0001-rtc-pcf8523.patch b/srcpkgs/kernel-rpi/patches/0001-rtc-pcf8523.patch deleted file mode 100644 index bc8f9a7a8f4..00000000000 --- a/srcpkgs/kernel-rpi/patches/0001-rtc-pcf8523.patch +++ /dev/null @@ -1,387 +0,0 @@ -From f803f0d079ded4272d7a1c9813bfd24c58b8ee5f Mon Sep 17 00:00:00 2001 -From: Thierry Reding -Date: Mon, 17 Dec 2012 16:02:44 -0800 -Subject: [PATCH] rtc: add NXP PCF8523 support - -Add an RTC driver for PCF8523 chips by NXP Semiconductors. No support is -currently provided for the alarm and interrupt functions. Only the time -and date functionality is implemented. - -Signed-off-by: Thierry Reding -Cc: Alessandro Zummo -Signed-off-by: Andrew Morton -Signed-off-by: Linus Torvalds ---- - drivers/rtc/Kconfig | 9 ++ - drivers/rtc/Makefile | 1 + - drivers/rtc/rtc-pcf8523.c | 326 +++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 336 insertions(+), 0 deletions(-) - create mode 100644 drivers/rtc/rtc-pcf8523.c - -diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig -index 608a7b1..5bb0314 100644 ---- drivers/rtc/Kconfig -+++ drivers/rtc/Kconfig -@@ -269,6 +269,15 @@ config RTC_DRV_X1205 - This driver can also be built as a module. If so, the module - will be called rtc-x1205. - -+config RTC_DRV_PCF8523 -+ tristate "NXP PCF8523" -+ help -+ If you say yes here you get support for the NXP PCF8523 RTC -+ chips. -+ -+ This driver can also be built as a module. If so, the module -+ will be called rtc-pcf8523. -+ - config RTC_DRV_PCF8563 - tristate "Philips PCF8563/Epson RTC8564" - help -diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile -index 56297f0..59e2132 100644 ---- drivers/rtc/Makefile -+++ drivers/rtc/Makefile -@@ -76,6 +76,7 @@ obj-$(CONFIG_RTC_DRV_MV) += rtc-mv.o - obj-$(CONFIG_RTC_DRV_NUC900) += rtc-nuc900.o - obj-$(CONFIG_RTC_DRV_OMAP) += rtc-omap.o - obj-$(CONFIG_RTC_DRV_PCAP) += rtc-pcap.o -+obj-$(CONFIG_RTC_DRV_PCF8523) += rtc-pcf8523.o - obj-$(CONFIG_RTC_DRV_PCF8563) += rtc-pcf8563.o - obj-$(CONFIG_RTC_DRV_PCF8583) += rtc-pcf8583.o - obj-$(CONFIG_RTC_DRV_PCF2123) += rtc-pcf2123.o -diff --git a/drivers/rtc/rtc-pcf8523.c b/drivers/rtc/rtc-pcf8523.c -new file mode 100644 -index 0000000..be05a64 ---- /dev/null -+++ drivers/rtc/rtc-pcf8523.c -@@ -0,0 +1,326 @@ -+/* -+ * Copyright (C) 2012 Avionic Design GmbH -+ * -+ * 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. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#define DRIVER_NAME "rtc-pcf8523" -+ -+#define REG_CONTROL1 0x00 -+#define REG_CONTROL1_CAP_SEL (1 << 7) -+#define REG_CONTROL1_STOP (1 << 5) -+ -+#define REG_CONTROL3 0x02 -+#define REG_CONTROL3_PM_BLD (1 << 7) /* battery low detection disabled */ -+#define REG_CONTROL3_PM_VDD (1 << 6) /* switch-over disabled */ -+#define REG_CONTROL3_PM_DSM (1 << 5) /* direct switching mode */ -+#define REG_CONTROL3_PM_MASK 0xe0 -+ -+#define REG_SECONDS 0x03 -+#define REG_SECONDS_OS (1 << 7) -+ -+#define REG_MINUTES 0x04 -+#define REG_HOURS 0x05 -+#define REG_DAYS 0x06 -+#define REG_WEEKDAYS 0x07 -+#define REG_MONTHS 0x08 -+#define REG_YEARS 0x09 -+ -+struct pcf8523 { -+ struct rtc_device *rtc; -+}; -+ -+static int pcf8523_read(struct i2c_client *client, u8 reg, u8 *valuep) -+{ -+ struct i2c_msg msgs[2]; -+ u8 value = 0; -+ int err; -+ -+ msgs[0].addr = client->addr; -+ msgs[0].flags = 0; -+ msgs[0].len = sizeof(reg); -+ msgs[0].buf = ® -+ -+ msgs[1].addr = client->addr; -+ msgs[1].flags = I2C_M_RD; -+ msgs[1].len = sizeof(value); -+ msgs[1].buf = &value; -+ -+ err = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); -+ if (err < 0) -+ return err; -+ -+ *valuep = value; -+ -+ return 0; -+} -+ -+static int pcf8523_write(struct i2c_client *client, u8 reg, u8 value) -+{ -+ u8 buffer[2] = { reg, value }; -+ struct i2c_msg msg; -+ int err; -+ -+ msg.addr = client->addr; -+ msg.flags = 0; -+ msg.len = sizeof(buffer); -+ msg.buf = buffer; -+ -+ err = i2c_transfer(client->adapter, &msg, 1); -+ if (err < 0) -+ return err; -+ -+ return 0; -+} -+ -+static int pcf8523_select_capacitance(struct i2c_client *client, bool high) -+{ -+ u8 value; -+ int err; -+ -+ err = pcf8523_read(client, REG_CONTROL1, &value); -+ if (err < 0) -+ return err; -+ -+ if (!high) -+ value &= ~REG_CONTROL1_CAP_SEL; -+ else -+ value |= REG_CONTROL1_CAP_SEL; -+ -+ err = pcf8523_write(client, REG_CONTROL1, value); -+ if (err < 0) -+ return err; -+ -+ return err; -+} -+ -+static int pcf8523_set_pm(struct i2c_client *client, u8 pm) -+{ -+ u8 value; -+ int err; -+ -+ err = pcf8523_read(client, REG_CONTROL3, &value); -+ if (err < 0) -+ return err; -+ -+ value = (value & ~REG_CONTROL3_PM_MASK) | pm; -+ -+ err = pcf8523_write(client, REG_CONTROL3, value); -+ if (err < 0) -+ return err; -+ -+ return 0; -+} -+ -+static int pcf8523_stop_rtc(struct i2c_client *client) -+{ -+ u8 value; -+ int err; -+ -+ err = pcf8523_read(client, REG_CONTROL1, &value); -+ if (err < 0) -+ return err; -+ -+ value |= REG_CONTROL1_STOP; -+ -+ err = pcf8523_write(client, REG_CONTROL1, value); -+ if (err < 0) -+ return err; -+ -+ return 0; -+} -+ -+static int pcf8523_start_rtc(struct i2c_client *client) -+{ -+ u8 value; -+ int err; -+ -+ err = pcf8523_read(client, REG_CONTROL1, &value); -+ if (err < 0) -+ return err; -+ -+ value &= ~REG_CONTROL1_STOP; -+ -+ err = pcf8523_write(client, REG_CONTROL1, value); -+ if (err < 0) -+ return err; -+ -+ return 0; -+} -+ -+static int pcf8523_rtc_read_time(struct device *dev, struct rtc_time *tm) -+{ -+ struct i2c_client *client = to_i2c_client(dev); -+ u8 start = REG_SECONDS, regs[7]; -+ struct i2c_msg msgs[2]; -+ int err; -+ -+ msgs[0].addr = client->addr; -+ msgs[0].flags = 0; -+ msgs[0].len = 1; -+ msgs[0].buf = &start; -+ -+ msgs[1].addr = client->addr; -+ msgs[1].flags = I2C_M_RD; -+ msgs[1].len = sizeof(regs); -+ msgs[1].buf = regs; -+ -+ err = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); -+ if (err < 0) -+ return err; -+ -+ if (regs[0] & REG_SECONDS_OS) { -+ /* -+ * If the oscillator was stopped, try to clear the flag. Upon -+ * power-up the flag is always set, but if we cannot clear it -+ * the oscillator isn't running properly for some reason. The -+ * sensible thing therefore is to return an error, signalling -+ * that the clock cannot be assumed to be correct. -+ */ -+ -+ regs[0] &= ~REG_SECONDS_OS; -+ -+ err = pcf8523_write(client, REG_SECONDS, regs[0]); -+ if (err < 0) -+ return err; -+ -+ err = pcf8523_read(client, REG_SECONDS, ®s[0]); -+ if (err < 0) -+ return err; -+ -+ if (regs[0] & REG_SECONDS_OS) -+ return -EAGAIN; -+ } -+ -+ tm->tm_sec = bcd2bin(regs[0] & 0x7f); -+ tm->tm_min = bcd2bin(regs[1] & 0x7f); -+ tm->tm_hour = bcd2bin(regs[2] & 0x3f); -+ tm->tm_mday = bcd2bin(regs[3] & 0x3f); -+ tm->tm_wday = regs[4] & 0x7; -+ tm->tm_mon = bcd2bin(regs[5] & 0x1f); -+ tm->tm_year = bcd2bin(regs[6]) + 100; -+ -+ return rtc_valid_tm(tm); -+} -+ -+static int pcf8523_rtc_set_time(struct device *dev, struct rtc_time *tm) -+{ -+ struct i2c_client *client = to_i2c_client(dev); -+ struct i2c_msg msg; -+ u8 regs[8]; -+ int err; -+ -+ err = pcf8523_stop_rtc(client); -+ if (err < 0) -+ return err; -+ -+ regs[0] = REG_SECONDS; -+ regs[1] = bin2bcd(tm->tm_sec); -+ regs[2] = bin2bcd(tm->tm_min); -+ regs[3] = bin2bcd(tm->tm_hour); -+ regs[4] = bin2bcd(tm->tm_mday); -+ regs[5] = tm->tm_wday; -+ regs[6] = bin2bcd(tm->tm_mon); -+ regs[7] = bin2bcd(tm->tm_year - 100); -+ -+ msg.addr = client->addr; -+ msg.flags = 0; -+ msg.len = sizeof(regs); -+ msg.buf = regs; -+ -+ err = i2c_transfer(client->adapter, &msg, 1); -+ if (err < 0) { -+ /* -+ * If the time cannot be set, restart the RTC anyway. Note -+ * that errors are ignored if the RTC cannot be started so -+ * that we have a chance to propagate the original error. -+ */ -+ pcf8523_start_rtc(client); -+ return err; -+ } -+ -+ return pcf8523_start_rtc(client); -+} -+ -+static const struct rtc_class_ops pcf8523_rtc_ops = { -+ .read_time = pcf8523_rtc_read_time, -+ .set_time = pcf8523_rtc_set_time, -+}; -+ -+static int pcf8523_probe(struct i2c_client *client, -+ const struct i2c_device_id *id) -+{ -+ struct pcf8523 *pcf; -+ int err; -+ -+ if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) -+ return -ENODEV; -+ -+ pcf = devm_kzalloc(&client->dev, sizeof(*pcf), GFP_KERNEL); -+ if (!pcf) -+ return -ENOMEM; -+ -+ err = pcf8523_select_capacitance(client, true); -+ if (err < 0) -+ return err; -+ -+ err = pcf8523_set_pm(client, 0); -+ if (err < 0) -+ return err; -+ -+ pcf->rtc = rtc_device_register(DRIVER_NAME, &client->dev, -+ &pcf8523_rtc_ops, THIS_MODULE); -+ if (IS_ERR(pcf->rtc)) -+ return PTR_ERR(pcf->rtc); -+ -+ i2c_set_clientdata(client, pcf); -+ -+ return 0; -+} -+ -+static int pcf8523_remove(struct i2c_client *client) -+{ -+ struct pcf8523 *pcf = i2c_get_clientdata(client); -+ -+ rtc_device_unregister(pcf->rtc); -+ -+ return 0; -+} -+ -+static const struct i2c_device_id pcf8523_id[] = { -+ { "pcf8523", 0 }, -+ { } -+}; -+MODULE_DEVICE_TABLE(i2c, pcf8523_id); -+ -+#ifdef CONFIG_OF -+static const struct of_device_id pcf8523_of_match[] = { -+ { .compatible = "nxp,pcf8523" }, -+ { } -+}; -+MODULE_DEVICE_TABLE(of, pcf8523_of_match); -+#endif -+ -+static struct i2c_driver pcf8523_driver = { -+ .driver = { -+ .name = DRIVER_NAME, -+ .owner = THIS_MODULE, -+ .of_match_table = of_match_ptr(pcf8523_of_match), -+ }, -+ .probe = pcf8523_probe, -+ .remove = pcf8523_remove, -+ .id_table = pcf8523_id, -+}; -+module_i2c_driver(pcf8523_driver); -+ -+MODULE_AUTHOR("Thierry Reding "); -+MODULE_DESCRIPTION("NXP PCF8523 RTC driver"); -+MODULE_LICENSE("GPL v2"); --- -1.7.6.5 - diff --git a/srcpkgs/kernel-rpi/patches/0002-pcf8523-i2c-register-dt.patch b/srcpkgs/kernel-rpi/patches/0002-pcf8523-i2c-register-dt.patch deleted file mode 100644 index 2a73de92745..00000000000 --- a/srcpkgs/kernel-rpi/patches/0002-pcf8523-i2c-register-dt.patch +++ /dev/null @@ -1,42 +0,0 @@ -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 7fe7283..a8e31e7 100644 ---- arch/arm/mach-bcm2708/bcm2708.c -+++ arch/arm/mach-bcm2708/bcm2708.c -@@ -689,6 +689,21 @@ static void bcm2708_power_off(void) - bcm2708_restart(0, ""); - } - -+#ifdef CONFIG_RTC_DRV_PCF8523 -+static struct i2c_board_info offboard_i2c_devices[] = { -+ { -+ /* Raspy Juice real-time clock chip */ -+ I2C_BOARD_INFO("pcf8523", 0x68), -+ }, -+}; -+ -+#if defined(CONFIG_RTC_HCTOSYS) && \ -+ (!defined(CONFIG_I2C_CHARDEV) || \ -+ !defined(CONFIG_I2C_BCM2708)) -+#error "RTC_DRV_PCF8523 defined as kernel built-in, but I2C_CHARDEV and I2C_BMC2708 isn't: RTC_HCTOSYS will not work." -+#endif -+#endif -+ - void __init bcm2708_init(void) - { - int i; -@@ -752,6 +767,15 @@ void __init bcm2708_init(void) - spi_register_board_info(bcm2708_spi_devices, - ARRAY_SIZE(bcm2708_spi_devices)); - #endif -+ -+#ifdef CONFIG_RTC_DRV_PCF8523 -+ i = 0; -+ /* test of Raspberry Pi Rev.2, where GPIO-header I2C busnum=1 */ -+ if (system_rev >= 15) -+ i = 1; -+ i2c_register_board_info(i, offboard_i2c_devices, -+ ARRAY_SIZE(offboard_i2c_devices)); -+#endif - } - - #define TIMER_PERIOD DIV_ROUND_CLOSEST(STC_FREQ_HZ, HZ) diff --git a/srcpkgs/kernel-rpi/patches/usb-add-reset-resume-quirk-for-several-webcams.patch b/srcpkgs/kernel-rpi/patches/usb-add-reset-resume-quirk-for-several-webcams.patch deleted file mode 100644 index bf642f51d77..00000000000 --- a/srcpkgs/kernel-rpi/patches/usb-add-reset-resume-quirk-for-several-webcams.patch +++ /dev/null @@ -1,98 +0,0 @@ -commit 2394d67e446bf616a0885167d5f0d397bdacfdfc -Author: Oliver Neukum -Date: Tue Sep 13 08:42:21 2011 +0200 - - USB: add RESET_RESUME for webcams shown to be quirky - - The new runtime PM code has shown that many webcams suffer - from a race condition that may crash them upon resume. - Runtime PM is especially prone to show the problem because - it retains power to the cameras at all times. However - system suspension may also crash the devices and retain - power to the devices. - The only way to solve this problem without races is in - usbcore with the RESET_RESUME quirk. - - Signed-off-by: Oliver Neukum - Signed-off-by: stable - Signed-off-by: Greg Kroah-Hartman - -diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c -index 81ce6a8..38f0510 100644 ---- drivers/usb/core/quirks.c -+++ drivers/usb/core/quirks.c -@@ -38,6 +38,24 @@ static const struct usb_device_id usb_quirk_list[] = { - /* Creative SB Audigy 2 NX */ - { USB_DEVICE(0x041e, 0x3020), .driver_info = USB_QUIRK_RESET_RESUME }, - -+ /* Logitech Webcam C200 */ -+ { USB_DEVICE(0x046d, 0x0802), .driver_info = USB_QUIRK_RESET_RESUME }, -+ -+ /* Logitech Webcam C250 */ -+ { USB_DEVICE(0x046d, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME }, -+ -+ /* Logitech Webcam B/C500 */ -+ { USB_DEVICE(0x046d, 0x0807), .driver_info = USB_QUIRK_RESET_RESUME }, -+ -+ /* Logitech Webcam Pro 9000 */ -+ { USB_DEVICE(0x046d, 0x0809), .driver_info = USB_QUIRK_RESET_RESUME }, -+ -+ /* Logitech Webcam C310 */ -+ { USB_DEVICE(0x046d, 0x081b), .driver_info = USB_QUIRK_RESET_RESUME }, -+ -+ /* Logitech Webcam C270 */ -+ { USB_DEVICE(0x046d, 0x0825), .driver_info = USB_QUIRK_RESET_RESUME }, -+ - /* Logitech Harmony 700-series */ - { USB_DEVICE(0x046d, 0xc122), .driver_info = USB_QUIRK_DELAY_INIT }, - -@@ -69,6 +87,9 @@ static const struct usb_device_id usb_quirk_list[] = { - { USB_DEVICE(0x06a3, 0x0006), .driver_info = - USB_QUIRK_CONFIG_INTF_STRINGS }, - -+ /* Guillemot Webcam Hercules Dualpix Exchange*/ -+ { USB_DEVICE(0x06f8, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME }, -+ - /* M-Systems Flash Disk Pioneers */ - { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, - -commit 5b253d88cc6c65a23cefc457a5a4ef139913c5fc -Author: Jon Levell -Date: Thu Sep 29 20:42:52 2011 +0100 - - USB: add quirk for Logitech C300 web cam - - My webcam is a Logitech C300 and I get "chipmunk"ed squeaky sound. - The following trivial patch fixes it. - - Signed-off-by: Jon Levell - Cc: stable - Signed-off-by: Greg Kroah-Hartman - -diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c -index 38f0510..d6a8d82 100644 ---- drivers/usb/core/quirks.c -+++ drivers/usb/core/quirks.c -@@ -44,6 +44,9 @@ static const struct usb_device_id usb_quirk_list[] = { - /* Logitech Webcam C250 */ - { USB_DEVICE(0x046d, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME }, - -+ /* Logitech Webcam C300 */ -+ { USB_DEVICE(0x046d, 0x0805), .driver_info = USB_QUIRK_RESET_RESUME }, -+ - /* Logitech Webcam B/C500 */ - { USB_DEVICE(0x046d, 0x0807), .driver_info = USB_QUIRK_RESET_RESUME }, - -diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c -index d6a8d82..caa1991 100644 ---- drivers/usb/core/quirks.c -+++ drivers/usb/core/quirks.c -@@ -50,6 +50,9 @@ static const struct usb_device_id usb_quirk_list[] = { - /* Logitech Webcam B/C500 */ - { USB_DEVICE(0x046d, 0x0807), .driver_info = USB_QUIRK_RESET_RESUME }, - -+ /* Logitech Webcam C600 */ -+ { USB_DEVICE(0x046d, 0x0808), .driver_info = USB_QUIRK_RESET_RESUME }, -+ - /* Logitech Webcam Pro 9000 */ - { USB_DEVICE(0x046d, 0x0809), .driver_info = USB_QUIRK_RESET_RESUME }, diff --git a/srcpkgs/kernel-rpi/template b/srcpkgs/kernel-rpi/template index 1a7f8c03090..e115e341b0e 100644 --- a/srcpkgs/kernel-rpi/template +++ b/srcpkgs/kernel-rpi/template @@ -1,18 +1,18 @@ # Template file for 'kernel-rpi' # -# Latest commit as of 20131009 -_githash="10bc582" +# Latest commit as of 20131107 +_githash="350ee7b" pkgname=kernel-rpi -version=3.6.11 -revision=8 +version=3.10.18 +revision=1 maintainer="Juan RP " homepage="http://www.kernel.org" license="GPL-2" -short_desc="The Linux kernel and modules for the Raspberry Pi (3.6 series [git ${_githash}])" +short_desc="The Linux kernel and modules for the Raspberry Pi (3.10 series [git ${_githash}])" _kernver="${version}_${revision}" -hostmakedepends="perl python kmod>=11_2 uboot-mkimage" +hostmakedepends="perl python kmod>=11_2 uboot-mkimage openssl which elfutils bc" makedepends="ncurses-devel" only_for_archs="armv6l" @@ -113,15 +113,6 @@ do_install() { fi cp arch/arm/kernel/asm-offsets.s ${hdrdest}/arch/arm/kernel - # add headers for lirc package - mkdir -p ${hdrdest}/drivers/media/video - cp drivers/media/video/*.h ${hdrdest}/drivers/media/video/ - - for i in bt8xx cpia2 cx25840 cx88 em28xx pwc saa7134 sn9c102; do - mkdir -p ${hdrdest}/drivers/media/video/${i} - cp -a drivers/media/video/${i}/*.h ${hdrdest}/drivers/media/video/${i} - done - # Add docbook makefile install -Dm644 Documentation/DocBook/Makefile \ ${hdrdest}/Documentation/DocBook/Makefile @@ -165,7 +156,7 @@ do_install() { kernel-headers-rpi_package() { nostrip=yes noverifyrdeps=yes - short_desc="Linux kernel headers for the RaspberryPI (3.6 series [${_githash}])" + short_desc="Linux kernel headers for the RaspberryPI (3.10 series [${_githash}])" pkg_install() { vmove usr/src vmove usr/lib/modules/${_kernver}/build @@ -175,7 +166,6 @@ kernel-headers-rpi_package() { kernel-rpi_package() { nostrip=yes noverifyrdeps=yes - provides="kernel-${version}" triggers="kernel-hooks" depends="kmod>=11_2" # These files could be modified when an external module is built.