From patchwork Sat Aug 8 17:46:16 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexey Klimov X-Patchwork-Id: 40188 X-Patchwork-Delegate: dougsland@redhat.com Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n78Hjao8009537 for ; Sat, 8 Aug 2009 17:46:18 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752716AbZHHRqP (ORCPT ); Sat, 8 Aug 2009 13:46:15 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752741AbZHHRqP (ORCPT ); Sat, 8 Aug 2009 13:46:15 -0400 Received: from mail-ew0-f214.google.com ([209.85.219.214]:51190 "EHLO mail-ew0-f214.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752716AbZHHRqO (ORCPT ); Sat, 8 Aug 2009 13:46:14 -0400 Received: by mail-ew0-f214.google.com with SMTP id 10so2174216ewy.37 for ; Sat, 08 Aug 2009 10:46:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:subject:from:to:cc :content-type:date:message-id:mime-version:x-mailer :content-transfer-encoding; bh=4P9HSVdOZvKPs9A6GS7nFSOHwNepcQmIvPx+HV5FKl0=; b=bgJadQO54PnRvPiiB4ks3hl3InouYNXe5N+i/nUYBoDwYIyzpGSdnR7sH9XghBGW8c skqhLDLSLx90D94bXaMB+Kx+yqRjzQwQXAD0dkVhIE/+DNBhcRu7cLi6uW9AwGdN+A8z zBYdYRk6kCiXxlW4QfufIUlgKdTvXKOYPCAo0= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=subject:from:to:cc:content-type:date:message-id:mime-version :x-mailer:content-transfer-encoding; b=b+idGK1Dx6PK9WjsZ320s/6cXFkOkV9hgcRd9YbImwbrjJNgXBz7ZIyoykIO37rWHR 4VAXXHsYA6xS3YS+EsE7EIid6SFxyQXejcM7FWEwdyLweBUoVL6tAc425zIGS3SYt1j6 IElrwJePSrUPihCPRdKLYE98c9E0nEodUTwRc= Received: by 10.210.57.15 with SMTP id f15mr902675eba.54.1249753575839; Sat, 08 Aug 2009 10:46:15 -0700 (PDT) Received: from ?95.78.132.126? ([95.78.132.126]) by mx.google.com with ESMTPS id 10sm6282676eyz.31.2009.08.08.10.46.15 (version=SSLv3 cipher=RC4-MD5); Sat, 08 Aug 2009 10:46:15 -0700 (PDT) Subject: [patch review 6/6] radio-mr800: redesign radio->users counter From: Alexey Klimov To: Douglas Schilling Landgraf Cc: linux-media@vger.kernel.org Date: Sat, 08 Aug 2009 21:46:16 +0400 Message-Id: <1249753576.15160.251.camel@tux.localhost> Mime-Version: 1.0 X-Mailer: Evolution 2.26.3 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Redesign radio->users counter. Don't allow more that 5 users on radio in usb_amradio_open() and don't stop radio device if other userspace application uses it in usb_amradio_close(). Signed-off-by: Alexey Klimov diff -r c2dd9da28106 linux/drivers/media/radio/radio-mr800.c --- a/linux/drivers/media/radio/radio-mr800.c Sat Aug 08 17:28:18 2009 +0400 +++ b/linux/drivers/media/radio/radio-mr800.c Sat Aug 08 18:12:01 2009 +0400 @@ -540,7 +540,13 @@ { struct amradio_device *radio = video_get_drvdata(video_devdata(file)); - radio->users = 1; + /* don't allow more than 5 users on radio */ + if (radio->users > 4) + return -EBUSY; + + mutex_lock(&radio->lock); + radio->users++; + mutex_unlock(&radio->lock); return 0; } @@ -554,9 +560,20 @@ return -ENODEV; mutex_lock(&radio->lock); - radio->users = 0; + radio->users--; mutex_unlock(&radio->lock); + /* In case several userspace applications opened the radio + * and one of them closes and stops it, + * we check if others use it and if they do we start the radio again. */ + if (radio->users && radio->status == AMRADIO_STOP) { + int retval; + retval = amradio_set_mute(radio, AMRADIO_START); + if (retval < 0) + dev_warn(&radio->videodev->dev, + "amradio_start failed\n"); + } + return 0; }