From patchwork Fri May 15 21:31:51 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Pali_Roh=C3=A1r?= X-Patchwork-Id: 29677 X-Patchwork-Delegate: hverkuil@xs4all.nl Received: from mail.tu-berlin.de ([130.149.7.33]) by www.linuxtv.org with esmtp (Exim 4.72) (envelope-from ) id 1YtNE8-0000PL-IW; Fri, 15 May 2015 23:33:04 +0200 X-tubIT-Incoming-IP: 209.132.180.67 Received: from vger.kernel.org ([209.132.180.67]) by mail.tu-berlin.de (exim-4.76/mailfrontend-5) with esmtp id 1YtNE5-0007Hx-7q; Fri, 15 May 2015 23:33:04 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2992582AbbEOVcm (ORCPT + 1 other); Fri, 15 May 2015 17:32:42 -0400 Received: from mail-wg0-f46.google.com ([74.125.82.46]:35272 "EHLO mail-wg0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2992576AbbEOVcl (ORCPT ); Fri, 15 May 2015 17:32:41 -0400 Received: by wgkx2 with SMTP id x2so7295951wgk.2; Fri, 15 May 2015 14:32:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:mime-version:content-type :content-transfer-encoding; bh=zDNIRiFqENOwPvUAFdRQKih1il6XKd832ZOrNKvmSj8=; b=SIRU43ZK/hwPoIVGmK61w9I6HM8CzlkaOVWz72UbSGtZz7ZsL6zHvtPqpiE9lnMOiL PsRz3HenYXKb5xBQWtnohF9iTU8z6BqufZpawBbRhJ3XLrvBAZEl4uL0VmAei+LQOcQY 5PWLCaLtc7Z9DBeRD8Ou9oo5SAuBwbiarGkK68eEicgYfy7zjzrJKvqNdR+xNW5NyEpT aHShgfyICBG4h6YKmORhyRDj2TmKGPDIJCv7DjNsL3BWSMiLDS7n/t5p+xQfODXV7sgT 0Vxb3GdBlYyPyGKT5qYrKs/P+vEtoB8YSSmWBZASeVfNwZicyUlfImYhJXXBU6/ijvvp DvrQ== X-Received: by 10.180.76.8 with SMTP id g8mr921770wiw.79.1431725560311; Fri, 15 May 2015 14:32:40 -0700 (PDT) Received: from Pali-Latitude.kolej.mff.cuni.cz (pali.kolej.mff.cuni.cz. [78.128.193.202]) by mx.google.com with ESMTPSA id ex5sm4783731wib.2.2015.05.15.14.32.38 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 May 2015 14:32:39 -0700 (PDT) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Mauro Carvalho Chehab , Greg Kroah-Hartman , Hans Verkuil , Pavel Machek Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, maxx , =?UTF-8?q?Pali=20Roh=C3=A1r?= Subject: [PATCH] radio-bcm2048: Enable access to automute and ctrl registers Date: Fri, 15 May 2015 23:31:51 +0200 Message-Id: <1431725511-7379-1-git-send-email-pali.rohar@gmail.com> X-Mailer: git-send-email 1.7.9.5 MIME-Version: 1.0 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-PMX-Version: 6.0.0.2142326, Antispam-Engine: 2.7.2.2107409, Antispam-Data: 2015.5.15.212416 X-PMX-Spam: Gauge=IIIIIIIII, Probability=9%, Report=' FORGED_FROM_GMAIL 0.1, MULTIPLE_RCPTS 0.1, HTML_00_01 0.05, HTML_00_10 0.05, BODY_SIZE_3000_3999 0, BODY_SIZE_5000_LESS 0, BODY_SIZE_7000_LESS 0, CT_TEXT_PLAIN_UTF8_CAPS 0, DKIM_SIGNATURE 0, URI_ENDS_IN_HTML 0, __ANY_URI 0, __CP_URI_IN_BODY 0, __CT 0, __CTE 0, __CT_TEXT_PLAIN 0, __FRAUD_BODY_WEBMAIL 0, __FRAUD_MONEY 0, __FRAUD_MONEY_VALUE 0, __FRAUD_WEBMAIL 0, __FRAUD_WEBMAIL_FROM 0, __FROM_GMAIL 0, __HAS_FROM 0, __HAS_MSGID 0, __HAS_X_MAILER 0, __HAS_X_MAILING_LIST 0, __MIME_TEXT_ONLY 0, __MIME_VERSION 0, __MULTIPLE_RCPTS_CC_X2 0, __PHISH_SPEAR_STRUCTURE_1 0, __SANE_MSGID 0, __SUBJ_ALPHA_END 0, __TO_MALFORMED_2 0, __URI_NO_WWW 0, __URI_NS , __YOUTUBE_RCVD 0' From: maxx This enables access to automute function of the chip via sysfs and gives direct access to FM_AUDIO_CTRL0/1 registers, also via sysfs. I don't think this is so important but helps in developing radio scanner apps. Patch writen by maxx@spaceboyz.net Signed-off-by: Pali Rohár Cc: maxx@spaceboyz.net Nacked-by: Hans Verkuil --- drivers/staging/media/bcm2048/radio-bcm2048.c | 96 +++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/drivers/staging/media/bcm2048/radio-bcm2048.c b/drivers/staging/media/bcm2048/radio-bcm2048.c index 1482d4b..8f9ba7b 100644 --- a/drivers/staging/media/bcm2048/radio-bcm2048.c +++ b/drivers/staging/media/bcm2048/radio-bcm2048.c @@ -826,6 +826,93 @@ static int bcm2048_get_mute(struct bcm2048_device *bdev) return err; } +static int bcm2048_set_automute(struct bcm2048_device *bdev, u8 automute) +{ + int err; + + mutex_lock(&bdev->mutex); + + err = bcm2048_send_command(bdev, BCM2048_I2C_FM_AUDIO_PAUSE, automute); + + mutex_unlock(&bdev->mutex); + return err; +} + +static int bcm2048_get_automute(struct bcm2048_device *bdev) +{ + int err; + u8 value; + + mutex_lock(&bdev->mutex); + + err = bcm2048_recv_command(bdev, BCM2048_I2C_FM_AUDIO_PAUSE, &value); + + mutex_unlock(&bdev->mutex); + + if (!err) + err = value; + + return err; +} + +static int bcm2048_set_ctrl0(struct bcm2048_device *bdev, u8 value) +{ + int err; + + mutex_lock(&bdev->mutex); + + err = bcm2048_send_command(bdev, BCM2048_I2C_FM_AUDIO_CTRL0, value); + + mutex_unlock(&bdev->mutex); + return err; +} + +static int bcm2048_set_ctrl1(struct bcm2048_device *bdev, u8 value) +{ + int err; + + mutex_lock(&bdev->mutex); + + err = bcm2048_send_command(bdev, BCM2048_I2C_FM_AUDIO_CTRL1, value); + + mutex_unlock(&bdev->mutex); + return err; +} + +static int bcm2048_get_ctrl0(struct bcm2048_device *bdev) +{ + int err; + u8 value; + + mutex_lock(&bdev->mutex); + + err = bcm2048_recv_command(bdev, BCM2048_I2C_FM_AUDIO_CTRL0, &value); + + mutex_unlock(&bdev->mutex); + + if (!err) + err = value; + + return err; +} + +static int bcm2048_get_ctrl1(struct bcm2048_device *bdev) +{ + int err; + u8 value; + + mutex_lock(&bdev->mutex); + + err = bcm2048_recv_command(bdev, BCM2048_I2C_FM_AUDIO_CTRL1, &value); + + mutex_unlock(&bdev->mutex); + + if (!err) + err = value; + + return err; +} + static int bcm2048_set_audio_route(struct bcm2048_device *bdev, u8 route) { int err; @@ -2058,6 +2145,9 @@ static ssize_t bcm2048_##prop##_read(struct device *dev, \ DEFINE_SYSFS_PROPERTY(power_state, unsigned, int, "%u", 0) DEFINE_SYSFS_PROPERTY(mute, unsigned, int, "%u", 0) +DEFINE_SYSFS_PROPERTY(automute, unsigned, int, "%x", 0) +DEFINE_SYSFS_PROPERTY(ctrl0, unsigned, int, "%x", 0) +DEFINE_SYSFS_PROPERTY(ctrl1, unsigned, int, "%x", 0) DEFINE_SYSFS_PROPERTY(audio_route, unsigned, int, "%u", 0) DEFINE_SYSFS_PROPERTY(dac_output, unsigned, int, "%u", 0) @@ -2095,6 +2185,12 @@ static struct device_attribute attrs[] = { bcm2048_power_state_write), __ATTR(mute, S_IRUGO | S_IWUSR, bcm2048_mute_read, bcm2048_mute_write), + __ATTR(automute, S_IRUGO | S_IWUSR, bcm2048_automute_read, + bcm2048_automute_write), + __ATTR(ctrl0, S_IRUGO | S_IWUSR, bcm2048_ctrl0_read, + bcm2048_ctrl0_write), + __ATTR(ctrl1, S_IRUGO | S_IWUSR, bcm2048_ctrl1_read, + bcm2048_ctrl1_write), __ATTR(audio_route, S_IRUGO | S_IWUSR, bcm2048_audio_route_read, bcm2048_audio_route_write), __ATTR(dac_output, S_IRUGO | S_IWUSR, bcm2048_dac_output_read,