diff --git a/debian/changelog b/debian/changelog index 45873ec3a..1c2cc156c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -19,6 +19,8 @@ linux (4.7.2-1) UNRELEASED; urgency=medium - [x86] ACPI: ACPI_TABLE_UPGRADE replaced ACPI_INITRD_TABLE_OVERRIDE * cgroups: Enable memory controller by default * [armfh] udeb: Add efi-modules + * linux-kbuild: Include headers_install.sh and unifdef (Closes: #832359) + * udeb: Include cdc_ncm in nic-usb-modules (Closes: #833918) [ Martin Michlmayr ] * [armhf] Enable MMC_SDHCI_IPROC and HW_RANDOM_BCM2835 for BCM2835. @@ -49,6 +51,10 @@ linux (4.7.2-1) UNRELEASED; urgency=medium USB_CHIPIDEA, USB_HSIC_USB3503, RTC_DRV_PM8XXX, EXTCON_USB_GPIO, QCOM_COINCELL, and INPUT_PM8941_PWRKEY. + [ Uwe Kleine-König ] + * Fix perf to be able to find debug info based on build-id. (Closes: + #833096) + -- Ben Hutchings Wed, 20 Jul 2016 03:50:18 +0100 linux (4.7~rc7-1~exp1) experimental; urgency=medium @@ -127,6 +133,54 @@ linux (4.7~rc3-1~exp1) experimental; urgency=medium -- Ben Hutchings Sat, 18 Jun 2016 23:50:39 +0100 +linux (4.6.4-1) unstable; urgency=medium + + * Team upload. + * New upstream stable update: + https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.6.4 + - net_sched: fix pfifo_head_drop behavior vs backlog + - act_ipt: fix a bind refcnt leak + - net: Don't forget pr_fmt on net_dbg_ratelimited for CONFIG_DYNAMIC_DEBUG + - sit: correct IP protocol used in ipip6_err + - esp: Fix ESN generation under UDP encapsulation + - netem: fix a use after free + - ipmr/ip6mr: Initialize the last assert time of mfc entries. + - Bridge: Fix ipv6 mc snooping if bridge has no ipv6 address + - sock_diag: do not broadcast raw socket destruction + - bpf, perf: delay release of BPF prog after grace period + - neigh: Explicitly declare RCU-bh read side critical section in neigh_xmit() + - AX.25: Close socket connection on session completion + - [powerpc] crypto: vmx - Increase priority of aes-cbc cipher + - crypto: user - re-add size check for CRYPTO_MSG_GETALG + - USB: uas: Fix slave queue_depth not being set + - usb: quirks: Fix sorting + - usb: quirks: Add no-lpm quirk for Acer C120 LED Projector + - [armhf] usb: musb: only restore devctl when session was set in backup + - [armhf] usb: musb: Stop bulk endpoint while queue is rotated + - [armhf] usb: musb: Ensure rx reinit occurs for shared_fifo endpoints + - [armhf] usb: musb: host: correct cppi dma channel for isoch transfer + - xhci: Cleanup only when releasing primary hcd + - usb: xhci-plat: properly handle probe deferral for devm_clk_get() + - USB: xhci: Add broken streams quirk for Frescologic device id 1009 + - xhci: Fix handling timeouted commands on hosts in weird states. + - USB: mos7720: delete parport + - usb: gadget: fix spinlock dead lock in gadgetfs + - [arm64, armhf] usb: host: ehci-tegra: Grab the correct UTMI pads reset + - usb: dwc3: exynos: Fix deferred probing storm. + + [ Uwe Kleine-König ] + * Cherry pick patches for rtc-s35390a from next. (Closes: #794266) + + [ Salvatore Bonaccorso ] + * apparmor: fix oops, validate buffer size in apparmor_setprocattr() + (CVE-2016-6187) + + [ Ben Hutchings ] + * bridge: Fix ABI change in 4.6.4 + * [rt] Update to 4.6.4-rt6 (no functional change) + + -- Salvatore Bonaccorso Mon, 18 Jul 2016 21:57:31 +0200 + linux (4.6.3-1) unstable; urgency=medium [ Ben Hutchings ] diff --git a/debian/installer/modules/nic-usb-modules b/debian/installer/modules/nic-usb-modules index 61f9f361d..332e01518 100644 --- a/debian/installer/modules/nic-usb-modules +++ b/debian/installer/modules/nic-usb-modules @@ -6,7 +6,6 @@ rndis_wlan # Exclude wireless modem drivers which need extra configuration cdc_mbim - -cdc_ncm - cdc-phonet - hso - huawei_cdc_ncm - diff --git a/debian/patches/bugfix/all/perf-symbols-Use-proper-dso-name-for-is_regular_file.patch b/debian/patches/bugfix/all/perf-symbols-Use-proper-dso-name-for-is_regular_file.patch new file mode 100644 index 000000000..6749bc23d --- /dev/null +++ b/debian/patches/bugfix/all/perf-symbols-Use-proper-dso-name-for-is_regular_file.patch @@ -0,0 +1,88 @@ +From ed7b630b310775f3b6c0b360ede7a12cd8dff6fe Mon Sep 17 00:00:00 2001 +From: Jiri Olsa +Date: Fri, 24 Jun 2016 14:40:25 +0200 +Subject: [PATCH] perf symbols: Use proper dso name for is_regular_file +Origin: https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/commit/?id=ed7b630b310775f3b6c0b360ede7a12cd8dff6fe + +Marc reported use of uninitialized memory: + +> In commit "403567217d3f perf symbols: Do not read symbols/data from +> device files" a check to uninitialzied memory was added. This leads to +> the following valgrind output: +> +> ==24515== Syscall param stat(file_name) points to uninitialised byte(s) +> ==24515== at 0x75B26D5: _xstat (in /lib/x86_64-linux-gnu/libc-2.22.so) +> ==24515== by 0x4E548D: stat (stat.h:454) +> ==24515== by 0x4E548D: is_regular_file (util.c:687) +> ==24515== by 0x4A5BEE: dso__load (symbol.c:1435) +> ==24515== by 0x4BB1AE: map__load (map.c:289) +> ==24515== by 0x4BB1AE: map__find_symbol (map.c:333) +> ==24515== by 0x4835B3: thread__find_addr_location (event.c:1300) +> ==24515== by 0x4B5342: add_callchain_ip (machine.c:1652) +> ==24515== by 0x4B5342: thread__resolve_callchain_sample (machine.c:1906) +> ==24515== by 0x4B9E7D: thread__resolve_callchain (machine.c:1958) +> ==24515== by 0x441B3E: process_event (builtin-script.c:795) +> ==24515== by 0x441B3E: process_sample_event (builtin-script.c:920) +> ==24515== by 0x4BEE29: perf_evlist__deliver_sample (session.c:1192) +> ==24515== by 0x4BEE29: machines__deliver_event (session.c:1229) +> ==24515== by 0x4BF770: perf_session__deliver_event (session.c:1286) +> ==24515== by 0x4BF770: ordered_events__deliver_event (session.c:114) +> ==24515== by 0x4C1D17: __ordered_events__flush (ordered-events.c:207) +> ==24515== by 0x4C1D17: ordered_events__flush.part.3 (ordered-events.c:274) +> ==24515== by 0x4BF44C: perf_session__process_user_event (session.c:1325) +> ==24515== by 0x4BF44C: perf_session__process_event (session.c:1451) +> ==24515== Address 0x807c6a0 is 0 bytes inside a block of size 4,096 alloc'd +> ==24515== at 0x4C29C0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) +> ==24515== by 0x4A5BCB: dso__load (symbol.c:1421) +> ==24515== by 0x4BB1AE: map__load (map.c:289) +> ==24515== by 0x4BB1AE: map__find_symbol (map.c:333) +> ==24515== by 0x4835B3: thread__find_addr_location (event.c:1300) +> ==24515== by 0x4B5342: add_callchain_ip (machine.c:1652) +> ==24515== by 0x4B5342: thread__resolve_callchain_sample (machine.c:1906) +> ==24515== by 0x4B9E7D: thread__resolve_callchain (machine.c:1958) +> ==24515== by 0x441B3E: process_event (builtin-script.c:795) +> ==24515== by 0x441B3E: process_sample_event (builtin-script.c:920) +> ==24515== by 0x4BEE29: perf_evlist__deliver_sample (session.c:1192) +> ==24515== by 0x4BEE29: machines__deliver_event (session.c:1229) +> ==24515== by 0x4BF770: perf_session__deliver_event (session.c:1286) +> ==24515== by 0x4BF770: ordered_events__deliver_event (session.c:114) +> ==24515== by 0x4C1D17: __ordered_events__flush (ordered-events.c:207) +> ==24515== by 0x4C1D17: ordered_events__flush.part.3 (ordered-events.c:274) +> ==24515== by 0x4BF44C: perf_session__process_user_event (session.c:1325) +> ==24515== by 0x4BF44C: perf_session__process_event (session.c:1451) +> ==24515== by 0x4C0EAC: __perf_session__process_events (session.c:1804) +> ==24515== by 0x4C0EAC: perf_session__process_events (session.c:1858) + +The reason was a typo that passed global 'name' variable as the +is_regular_file argument instead dso->long_name. + +Reported-by: Marc Kleine-Budde +Signed-off-by: Jiri Olsa +Acked-by: Marc Kleine-Budde +Cc: David Ahern +Cc: Namhyung Kim +Cc: Peter Zijlstra +Cc: Wang Nan +Fixes: 403567217d3f ("perf symbols: Do not read symbols/data from device files") +Link: http://lkml.kernel.org/r/1466772025-17471-2-git-send-email-jolsa@kernel.org +Signed-off-by: Arnaldo Carvalho de Melo +--- + tools/perf/util/symbol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c +index b044f1a32d16..37e8d20ae03e 100644 +--- a/tools/perf/util/symbol.c ++++ b/tools/perf/util/symbol.c +@@ -1430,7 +1430,7 @@ int dso__load(struct dso *dso, struct map *map, symbol_filter_t filter) + * Read the build id if possible. This is required for + * DSO_BINARY_TYPE__BUILDID_DEBUGINFO to work + */ +- if (is_regular_file(name) && ++ if (is_regular_file(dso->long_name) && + filename__read_build_id(dso->long_name, build_id, BUILD_ID_SIZE) > 0) + dso__set_build_id(dso, build_id); + +-- +2.8.1 + diff --git a/debian/patches/bugfix/all/rtc-initialize-output-parameter-for-read-alarm-to-un.patch b/debian/patches/bugfix/all/rtc-initialize-output-parameter-for-read-alarm-to-un.patch new file mode 100644 index 000000000..44940a1b4 --- /dev/null +++ b/debian/patches/bugfix/all/rtc-initialize-output-parameter-for-read-alarm-to-un.patch @@ -0,0 +1,42 @@ +From: Uwe Kleine-König +Date: Wed, 11 May 2016 09:11:23 +0200 +Subject: [PATCH] rtc: initialize output parameter for read alarm to + "uninitialized" +Origin: https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/commit/?id=d68778b80dd78ad6ed998397af182163d0ef16b0 + +rtc drivers are supposed to set values they don't support to -1. To +simplify this for drivers and also make it harder for them to get it +wrong initialize the values to -1. + +Signed-off-by: Uwe Kleine-König +Signed-off-by: Alexandre Belloni +--- + drivers/rtc/interface.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c +index 9ef5f6f89f98..99475908e556 100644 +--- a/drivers/rtc/interface.c ++++ b/drivers/rtc/interface.c +@@ -104,7 +104,17 @@ static int rtc_read_alarm_internal(struct rtc_device *rtc, struct rtc_wkalrm *al + else if (!rtc->ops->read_alarm) + err = -EINVAL; + else { +- memset(alarm, 0, sizeof(struct rtc_wkalrm)); ++ alarm->enabled = 0; ++ alarm->pending = 0; ++ alarm->time.tm_sec = -1; ++ alarm->time.tm_min = -1; ++ alarm->time.tm_hour = -1; ++ alarm->time.tm_mday = -1; ++ alarm->time.tm_mon = -1; ++ alarm->time.tm_year = -1; ++ alarm->time.tm_wday = -1; ++ alarm->time.tm_yday = -1; ++ alarm->time.tm_isdst = -1; + err = rtc->ops->read_alarm(rtc->dev.parent, alarm); + } + +-- +2.8.1 + diff --git a/debian/patches/bugfix/all/rtc-s35390a-fix-reading-out-alarm.patch b/debian/patches/bugfix/all/rtc-s35390a-fix-reading-out-alarm.patch new file mode 100644 index 000000000..29f1dfa71 --- /dev/null +++ b/debian/patches/bugfix/all/rtc-s35390a-fix-reading-out-alarm.patch @@ -0,0 +1,94 @@ +From: Uwe Kleine-König +Date: Sat, 2 Jul 2016 17:28:08 +0200 +Subject: [PATCH] rtc: s35390a: fix reading out alarm +Origin: https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/commit/?id=ee82c046c1031af95e8c24dda072e04c565d4247 + +There are several issues fixed in this patch: + + - When alarm isn't enabled, set .enabled to zero instead of returning + -EINVAL. + - Ignore how IRQ1 is configured when determining if IRQ2 is on. + - The three alarm registers have an enable flag which must be + evaluated. + - The chip always triggers when the seconds register gets 0. + +Note that the rtc framework however doesn't handle the result correctly +because it doesn't check wday being initialized and so interprets an +alarm being set for 10:00 AM in three days as 10:00 AM tomorrow (or +today if that's not over yet). + +Signed-off-by: Uwe Kleine-König +Signed-off-by: Alexandre Belloni +--- + drivers/rtc/rtc-s35390a.c | 40 +++++++++++++++++++++++++++++++--------- + 1 file changed, 31 insertions(+), 9 deletions(-) + +diff --git a/drivers/rtc/rtc-s35390a.c b/drivers/rtc/rtc-s35390a.c +index f40afdd0e5f5..6507a01cf9ad 100644 +--- a/drivers/rtc/rtc-s35390a.c ++++ b/drivers/rtc/rtc-s35390a.c +@@ -242,6 +242,8 @@ static int s35390a_set_alarm(struct i2c_client *client, struct rtc_wkalrm *alm) + + if (alm->time.tm_wday != -1) + buf[S35390A_ALRM_BYTE_WDAY] = bin2bcd(alm->time.tm_wday) | 0x80; ++ else ++ buf[S35390A_ALRM_BYTE_WDAY] = 0; + + buf[S35390A_ALRM_BYTE_HOURS] = s35390a_hr2reg(s35390a, + alm->time.tm_hour) | 0x80; +@@ -269,23 +271,43 @@ static int s35390a_read_alarm(struct i2c_client *client, struct rtc_wkalrm *alm) + if (err < 0) + return err; + +- if (bitrev8(sts) != S35390A_INT2_MODE_ALARM) +- return -EINVAL; ++ if ((bitrev8(sts) & S35390A_INT2_MODE_MASK) != S35390A_INT2_MODE_ALARM) { ++ /* ++ * When the alarm isn't enabled, the register to configure ++ * the alarm time isn't accessible. ++ */ ++ alm->enabled = 0; ++ return 0; ++ } else { ++ alm->enabled = 1; ++ } + + err = s35390a_get_reg(s35390a, S35390A_CMD_INT2_REG1, buf, sizeof(buf)); + if (err < 0) + return err; + + /* This chip returns the bits of each byte in reverse order */ +- for (i = 0; i < 3; ++i) { ++ for (i = 0; i < 3; ++i) + buf[i] = bitrev8(buf[i]); +- buf[i] &= ~0x80; +- } + +- alm->time.tm_wday = bcd2bin(buf[S35390A_ALRM_BYTE_WDAY]); +- alm->time.tm_hour = s35390a_reg2hr(s35390a, +- buf[S35390A_ALRM_BYTE_HOURS]); +- alm->time.tm_min = bcd2bin(buf[S35390A_ALRM_BYTE_MINS]); ++ /* ++ * B0 of the three matching registers is an enable flag. Iff it is set ++ * the configured value is used for matching. ++ */ ++ if (buf[S35390A_ALRM_BYTE_WDAY] & 0x80) ++ alm->time.tm_wday = ++ bcd2bin(buf[S35390A_ALRM_BYTE_WDAY] & ~0x80); ++ ++ if (buf[S35390A_ALRM_BYTE_HOURS] & 0x80) ++ alm->time.tm_hour = ++ s35390a_reg2hr(s35390a, ++ buf[S35390A_ALRM_BYTE_HOURS] & ~0x80); ++ ++ if (buf[S35390A_ALRM_BYTE_MINS] & 0x80) ++ alm->time.tm_min = bcd2bin(buf[S35390A_ALRM_BYTE_MINS] & ~0x80); ++ ++ /* alarm triggers always at s=0 */ ++ alm->time.tm_sec = 0; + + dev_dbg(&client->dev, "%s: alm is mins=%d, hours=%d, wday=%d\n", + __func__, alm->time.tm_min, alm->time.tm_hour, +-- +2.8.1 + diff --git a/debian/patches/bugfix/all/rtc-s35390a-implement-reset-routine-as-suggested-by-.patch b/debian/patches/bugfix/all/rtc-s35390a-implement-reset-routine-as-suggested-by-.patch new file mode 100644 index 000000000..364c9097f --- /dev/null +++ b/debian/patches/bugfix/all/rtc-s35390a-implement-reset-routine-as-suggested-by-.patch @@ -0,0 +1,128 @@ +From: Uwe Kleine-König +Date: Sat, 2 Jul 2016 17:28:09 +0200 +Subject: [PATCH] rtc: s35390a: implement reset routine as suggested by the + reference +Origin: https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/commit/?id=0af8a35b6ab4ba000d8f18748bb621c8ed5e7827 + +There were two deviations from the reference manual: you have to wait +half a second when POC is active and you might have to repeat +initialization when POC or BLD are still set after the sequence. + +Note however that as POC and BLD are cleared by read the driver might +not be able to detect that a reset is necessary. I don't have a good +idea how to fix this. + +Additionally report the value read from STATUS1 to the caller. This +prepares the next patch. + +Signed-off-by: Uwe Kleine-König +Signed-off-by: Alexandre Belloni +--- + drivers/rtc/rtc-s35390a.c | 65 +++++++++++++++++++++++++++++++++++++++-------- + 1 file changed, 55 insertions(+), 10 deletions(-) + +diff --git a/drivers/rtc/rtc-s35390a.c b/drivers/rtc/rtc-s35390a.c +index 6507a01cf9ad..6c90c9f48cab 100644 +--- a/drivers/rtc/rtc-s35390a.c ++++ b/drivers/rtc/rtc-s35390a.c +@@ -15,6 +15,7 @@ + #include + #include + #include ++#include + + #define S35390A_CMD_STATUS1 0 + #define S35390A_CMD_STATUS2 1 +@@ -94,19 +95,63 @@ static int s35390a_get_reg(struct s35390a *s35390a, int reg, char *buf, int len) + return 0; + } + +-static int s35390a_reset(struct s35390a *s35390a) ++/* ++ * Returns <0 on error, 0 if rtc is setup fine and 1 if the chip was reset. ++ * To keep the information if an irq is pending, pass the value read from ++ * STATUS1 to the caller. ++ */ ++static int s35390a_reset(struct s35390a *s35390a, char *status1) + { +- char buf[1]; ++ char buf; ++ int ret; ++ unsigned initcount = 0; + +- if (s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, buf, sizeof(buf)) < 0) +- return -EIO; ++ ret = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, status1, 1); ++ if (ret < 0) ++ return ret; + +- if (!(buf[0] & (S35390A_FLAG_POC | S35390A_FLAG_BLD))) ++ if (*status1 & S35390A_FLAG_POC) ++ /* ++ * Do not communicate for 0.5 seconds since the power-on ++ * detection circuit is in operation. ++ */ ++ msleep(500); ++ else if (!(*status1 & S35390A_FLAG_BLD)) ++ /* ++ * If both POC and BLD are unset everything is fine. ++ */ + return 0; + +- buf[0] |= (S35390A_FLAG_RESET | S35390A_FLAG_24H); +- buf[0] &= 0xf0; +- return s35390a_set_reg(s35390a, S35390A_CMD_STATUS1, buf, sizeof(buf)); ++ /* ++ * At least one of POC and BLD are set, so reinitialise chip. Keeping ++ * this information in the hardware to know later that the time isn't ++ * valid is unfortunately not possible because POC and BLD are cleared ++ * on read. So the reset is best done now. ++ * ++ * The 24H bit is kept over reset, so set it already here. ++ */ ++initialize: ++ *status1 = S35390A_FLAG_24H; ++ buf = S35390A_FLAG_RESET | S35390A_FLAG_24H; ++ ret = s35390a_set_reg(s35390a, S35390A_CMD_STATUS1, &buf, 1); ++ ++ if (ret < 0) ++ return ret; ++ ++ ret = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, &buf, 1); ++ if (ret < 0) ++ return ret; ++ ++ if (buf & (S35390A_FLAG_POC | S35390A_FLAG_BLD)) { ++ /* Try up to five times to reset the chip */ ++ if (initcount < 5) { ++ ++initcount; ++ goto initialize; ++ } else ++ return -EIO; ++ } ++ ++ return 1; + } + + static int s35390a_disable_test_mode(struct s35390a *s35390a) +@@ -353,7 +398,7 @@ static int s35390a_probe(struct i2c_client *client, + unsigned int i; + struct s35390a *s35390a; + struct rtc_time tm; +- char buf[1]; ++ char buf[1], status1; + + if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { + err = -ENODEV; +@@ -382,7 +427,7 @@ static int s35390a_probe(struct i2c_client *client, + } + } + +- err = s35390a_reset(s35390a); ++ err = s35390a_reset(s35390a, &status1); + if (err < 0) { + dev_err(&client->dev, "error resetting chip\n"); + goto exit_dummy; +-- +2.8.1 + diff --git a/debian/patches/bugfix/all/rtc-s35390a-improve-irq-handling.patch b/debian/patches/bugfix/all/rtc-s35390a-improve-irq-handling.patch new file mode 100644 index 000000000..063931b49 --- /dev/null +++ b/debian/patches/bugfix/all/rtc-s35390a-improve-irq-handling.patch @@ -0,0 +1,123 @@ +From: Uwe Kleine-König +Date: Sat, 2 Jul 2016 17:28:10 +0200 +Subject: [PATCH] rtc: s35390a: improve irq handling +Origin: https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/commit/?id=998dd84e542720cf02cbe9ea002de3850df32996 + +On some QNAP NAS devices the rtc can wake the machine. Several people +noticed that once the machine was woken this way it fails to shut down. +That's because the driver fails to acknowledge the interrupt and so it +keeps active and restarts the machine immediatly after shutdown. See +https://bugs.debian.org/794266 for a bug report. + +Doing this correctly requires to interpret the INT2 flag of the first read +of the STATUS1 register because this bit is cleared by read. + +Note this is not maximally robust though because a pending irq isn't +detected when the STATUS1 register was already read (and so INT2 is not +set) but the irq was not disabled. But that is a hardware imposed problem +that cannot easily be fixed by software. + +Signed-off-by: Uwe Kleine-König +Signed-off-by: Alexandre Belloni +--- + drivers/rtc/rtc-s35390a.c | 48 ++++++++++++++++++++++++++++++----------------- + 1 file changed, 31 insertions(+), 17 deletions(-) + +diff --git a/drivers/rtc/rtc-s35390a.c b/drivers/rtc/rtc-s35390a.c +index 6c90c9f48cab..d5b572266a72 100644 +--- a/drivers/rtc/rtc-s35390a.c ++++ b/drivers/rtc/rtc-s35390a.c +@@ -35,10 +35,14 @@ + #define S35390A_ALRM_BYTE_HOURS 1 + #define S35390A_ALRM_BYTE_MINS 2 + ++/* flags for STATUS1 */ + #define S35390A_FLAG_POC 0x01 + #define S35390A_FLAG_BLD 0x02 ++#define S35390A_FLAG_INT2 0x04 + #define S35390A_FLAG_24H 0x40 + #define S35390A_FLAG_RESET 0x80 ++ ++/* flag for STATUS2 */ + #define S35390A_FLAG_TEST 0x01 + + #define S35390A_INT2_MODE_MASK 0xF0 +@@ -394,11 +398,11 @@ static struct i2c_driver s35390a_driver; + static int s35390a_probe(struct i2c_client *client, + const struct i2c_device_id *id) + { +- int err; ++ int err, err_reset; + unsigned int i; + struct s35390a *s35390a; + struct rtc_time tm; +- char buf[1], status1; ++ char buf, status1; + + if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { + err = -ENODEV; +@@ -427,29 +431,35 @@ static int s35390a_probe(struct i2c_client *client, + } + } + +- err = s35390a_reset(s35390a, &status1); +- if (err < 0) { ++ err_reset = s35390a_reset(s35390a, &status1); ++ if (err_reset < 0) { ++ err = err_reset; + dev_err(&client->dev, "error resetting chip\n"); + goto exit_dummy; + } + +- err = s35390a_disable_test_mode(s35390a); +- if (err < 0) { +- dev_err(&client->dev, "error disabling test mode\n"); +- goto exit_dummy; +- } +- +- err = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, buf, sizeof(buf)); +- if (err < 0) { +- dev_err(&client->dev, "error checking 12/24 hour mode\n"); +- goto exit_dummy; +- } +- if (buf[0] & S35390A_FLAG_24H) ++ if (status1 & S35390A_FLAG_24H) + s35390a->twentyfourhour = 1; + else + s35390a->twentyfourhour = 0; + +- if (s35390a_get_datetime(client, &tm) < 0) ++ if (status1 & S35390A_FLAG_INT2) { ++ /* disable alarm (and maybe test mode) */ ++ buf = 0; ++ err = s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &buf, 1); ++ if (err < 0) { ++ dev_err(&client->dev, "error disabling alarm"); ++ goto exit_dummy; ++ } ++ } else { ++ err = s35390a_disable_test_mode(s35390a); ++ if (err < 0) { ++ dev_err(&client->dev, "error disabling test mode\n"); ++ goto exit_dummy; ++ } ++ } ++ ++ if (err_reset > 0 || s35390a_get_datetime(client, &tm) < 0) + dev_warn(&client->dev, "clock needs to be set\n"); + + device_set_wakeup_capable(&client->dev, 1); +@@ -462,6 +472,10 @@ static int s35390a_probe(struct i2c_client *client, + err = PTR_ERR(s35390a->rtc); + goto exit_dummy; + } ++ ++ if (status1 & S35390A_FLAG_INT2) ++ rtc_update_irq(s35390a->rtc, 1, RTC_AF); ++ + return 0; + + exit_dummy: +-- +2.8.1 + diff --git a/debian/patches/series b/debian/patches/series index ed061bd4d..d730326e1 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -106,6 +106,8 @@ features/all/securelevel/mtd-disable-slram-and-phram-when-securelevel-is-enabled bugfix/all/ptrace-being-capable-wrt-a-process-requires-mapped-uids-gids.patch debian/i386-686-pae-pci-set-pci-nobios-by-default.patch +# ABI maintenance + # Tools bug fixes bugfix/all/usbip-document-tcp-wrappers.patch bugfix/all/kbuild-fix-recordmcount-dependency.patch @@ -131,3 +133,10 @@ bugfix/all/liblockdep-enable-wall-by-default.patch bugfix/all/liblockdep-fix-unused-value-warnings.patch bugfix/all/liblockdep-fix-set-but-not-used-warnings.patch bugfix/all/liblockdep-fix-defined-but-not-used-warning-for-init.patch +bugfix/all/perf-symbols-Use-proper-dso-name-for-is_regular_file.patch + +# Debian bug #794266 +bugfix/all/rtc-initialize-output-parameter-for-read-alarm-to-un.patch +bugfix/all/rtc-s35390a-fix-reading-out-alarm.patch +bugfix/all/rtc-s35390a-implement-reset-routine-as-suggested-by-.patch +bugfix/all/rtc-s35390a-improve-irq-handling.patch diff --git a/debian/rules.d/scripts/Makefile b/debian/rules.d/scripts/Makefile index d735ecf03..fc8c68186 100644 --- a/debian/rules.d/scripts/Makefile +++ b/debian/rules.d/scripts/Makefile @@ -4,7 +4,8 @@ PROGS = \ kallsyms \ pnmtologo \ recordmcount \ - sign-file + sign-file \ + unifdef DATA = \ Kbuild.include \ @@ -19,6 +20,7 @@ SCRIPTS = \ depmod.sh \ gcc-*.sh \ gen_initramfs_list.sh \ + headers_install.sh \ kernel-doc \ Lindent \ makelst \