From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-qt0-f173.google.com ([209.85.216.173]:41660 "EHLO mail-qt0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752062AbeARUBB (ORCPT ); Thu, 18 Jan 2018 15:01:01 -0500 Received: by mail-qt0-f173.google.com with SMTP id i1so16476524qtj.8 for ; Thu, 18 Jan 2018 12:01:01 -0800 (PST) Received: from Constantine (pool-96-230-237-116.bstnma.fios.verizon.net. [96.230.237.116]) by smtp.gmail.com with ESMTPSA id 8sm2823537qtp.36.2018.01.18.12.01.00 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 18 Jan 2018 12:01:00 -0800 (PST) Date: Thu, 18 Jan 2018 15:00:21 -0500 From: Douglas Fischer To: linux-media@vger.kernel.org Subject: [PATCH] media: radio: Critical interrupt bugfix for si470x over i2c Message-ID: <20180118150021.783eeb6a@Constantine> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-media-owner@vger.kernel.org List-ID: Fixed si470x_start() disabling the interrupt signal, causing tune operations to never complete. This does not affect USB radios because they poll the registers instead of using the IRQ line. Signed-off-by: Douglas Fischer --- diff -uprN linux.orig/drivers/media/radio/si470x/radio-si470x-common.c linux/drivers/media/radio/si470x/radio-si470x-common.c --- linux.orig/drivers/media/radio/si470x/radio-si470x-common.c 2018-01-15 21:58:10.675620432 -0500 +++ linux/drivers/media/radio/si470x/radio-si470x-common.c 2018-01-16 16:54:23.699770645 -0500 @@ -377,8 +377,13 @@ int si470x_start(struct si470x_device *r goto done; /* sysconfig 1 */ - radio->registers[SYSCONFIG1] = - (de << 11) & SYSCONFIG1_DE; /* DE*/ + radio->registers[SYSCONFIG1] |= SYSCONFIG1_RDSIEN; + radio->registers[SYSCONFIG1] |= SYSCONFIG1_STCIEN; + radio->registers[SYSCONFIG1] |= SYSCONFIG1_RDS; + radio->registers[SYSCONFIG1] &= ~SYSCONFIG1_GPIO2; + radio->registers[SYSCONFIG1] |= 0x1 << 2; + if (de) + radio->registers[SYSCONFIG1] |= SYSCONFIG1_DE; retval = si470x_set_register(radio, SYSCONFIG1); if (retval < 0) goto done;