From patchwork Tue Mar 7 23:45:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roderick Colenbrander X-Patchwork-Id: 9609993 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 1D78E6046A for ; Tue, 7 Mar 2017 23:46:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0E1CC28535 for ; Tue, 7 Mar 2017 23:46:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 02EAC2858B; Tue, 7 Mar 2017 23:46:55 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 97A5E28535 for ; Tue, 7 Mar 2017 23:46:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756366AbdCGXqx (ORCPT ); Tue, 7 Mar 2017 18:46:53 -0500 Received: from mail-pg0-f50.google.com ([74.125.83.50]:33180 "EHLO mail-pg0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933261AbdCGXqo (ORCPT ); Tue, 7 Mar 2017 18:46:44 -0500 Received: by mail-pg0-f50.google.com with SMTP id 25so6058606pgy.0 for ; Tue, 07 Mar 2017 15:45:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gaikai-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=KeJEmzuyCi8sM+vUgN1HlsKx8K2Fu/HLJ12BJ2r6H7A=; b=lNHM/zXAHOfA3qMFDwHAhVa+ySRfrDyGpQ6R4rr/SvMuqO92R4il7kmCo7Ct01VOye UR/S34+3S555NdSer1Mp5Z5aKc5MbctGnH6oOVs3VenP36uhWo8Bjr05AxBwpzzHoD7/ 8l/H923KII9RlsPDKfEcyxqB/N8OCUjYNd2nSQPumfEJWQ/857wVDwu9q1D/A7npiMgM jeiFmcKn243RiaF4pneHu2o5B8YHUDw8rJBXiDlyLviczZu+xOY981PjJ2NIV7TcWGQU mpmW7i/W6JTE9kKAimjgnLmEntSDgXn1oSpqr7eK20mlp2mCGarOaJrRoQriDDiL9Z/l wQrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=KeJEmzuyCi8sM+vUgN1HlsKx8K2Fu/HLJ12BJ2r6H7A=; b=QT82MPUe/MIBGSiQ2Zzv1FN28VUeYErnespO6cE+/nNOUfcseMfyvyPZ9OX5dMp+Xz +HTQ7aXW1mb8JgUEFe8b5X1/De72tFeIhedVqEsKN603mC+rq/b0VSnoplnjYT3pLJWj YVjVSTOSmXFt7q98mGHzIIOx7/DV/MPfrf6heQIIH8KjJSzTU3uKsJWnJQCzJXzNH/4R OiadnBAgLR9r6h0cSX9MNViuSLesCS/C28pdSaWsd/pd66ZALIVnte9wkIAJwavsEAhn k9x0QBoBYKZbmtwsCGljkObMYs6wCW2zpI280W+AM4iSdPBOFgvf9kw3Gc3uNN/40zqv RQaA== X-Gm-Message-State: AMke39nogxVZqO5oxzLsiy+BxQ0zb9o/uKs2cMGx/A3Y3pHJxZj0mdCM8RvnSCGu5ljwry9s X-Received: by 10.99.202.73 with SMTP id o9mr3364109pgi.173.1488930320717; Tue, 07 Mar 2017 15:45:20 -0800 (PST) Received: from roderick.ad.gaikai.biz ([100.42.98.197]) by smtp.gmail.com with ESMTPSA id e7sm1890993pgp.2.2017.03.07.15.45.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 07 Mar 2017 15:45:20 -0800 (PST) From: Roderick Colenbrander To: linux-input@vger.kernel.org Cc: Dmitry Torokhov , Jiri Kosina , Benjamin Tissoires , Simon Wood , Frank Praznik , Tim Bird , Roderick Colenbrander Subject: [PATCH v2 06/12] HID: sony: Make work handling more generic Date: Tue, 7 Mar 2017 15:45:05 -0800 Message-Id: <20170307234511.30380-7-roderick@gaikai.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170307234511.30380-1-roderick@gaikai.com> References: <20170307234511.30380-1-roderick@gaikai.com> Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Roderick Colenbrander The driver currently uses sony_schedule_work to submit output reports for the different devices for LEDs or rumble. This patch adds a new parameter to sony_schedule_work to allow scheduling for other types of work. The next patch in this series will utilize this functionality. Considering the driver structure and all error handling it felt best to reuse sony_schedule_work and sony_cancel_work. The idea was inspired by the wacom driver which does something similar. Signed-off-by: Roderick Colenbrander --- drivers/hid/hid-sony.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c index eff08af..19a4ca8 100644 --- a/drivers/hid/hid-sony.c +++ b/drivers/hid/hid-sony.c @@ -624,6 +624,10 @@ struct ds4_calibration_data { int sens_denom; }; +enum sony_worker { + SONY_WORKER_STATE +}; + struct sony_sc { spinlock_t lock; struct list_head list_node; @@ -645,7 +649,7 @@ struct sony_sc { #endif u8 mac_address[6]; - u8 worker_initialized; + u8 state_worker_initialized; u8 defer_initialization; u8 cable_state; u8 battery_charging; @@ -666,10 +670,14 @@ struct sony_sc { static void sony_set_leds(struct sony_sc *sc); -static inline void sony_schedule_work(struct sony_sc *sc) +static inline void sony_schedule_work(struct sony_sc *sc, + enum sony_worker which) { - if (!sc->defer_initialization) - schedule_work(&sc->state_worker); + switch (which) { + case SONY_WORKER_STATE: + if (!sc->defer_initialization) + schedule_work(&sc->state_worker); + } } static u8 *sixaxis_fixup(struct hid_device *hdev, u8 *rdesc, @@ -1103,7 +1111,7 @@ static int sony_raw_event(struct hid_device *hdev, struct hid_report *report, if (sc->defer_initialization) { sc->defer_initialization = 0; - sony_schedule_work(sc); + sony_schedule_work(sc, SONY_WORKER_STATE); } return 0; @@ -1584,7 +1592,7 @@ static void buzz_set_leds(struct sony_sc *sc) static void sony_set_leds(struct sony_sc *sc) { if (!(sc->quirks & BUZZ_CONTROLLER)) - sony_schedule_work(sc); + sony_schedule_work(sc, SONY_WORKER_STATE); else buzz_set_leds(sc); } @@ -1695,7 +1703,7 @@ static int sony_led_blink_set(struct led_classdev *led, unsigned long *delay_on, new_off != drv_data->led_delay_off[n]) { drv_data->led_delay_on[n] = new_on; drv_data->led_delay_off[n] = new_off; - sony_schedule_work(drv_data); + sony_schedule_work(drv_data, SONY_WORKER_STATE); } return 0; @@ -2025,7 +2033,7 @@ static int sony_play_effect(struct input_dev *dev, void *data, sc->left = effect->u.rumble.strong_magnitude / 256; sc->right = effect->u.rumble.weak_magnitude / 256; - sony_schedule_work(sc); + sony_schedule_work(sc, SONY_WORKER_STATE); return 0; } @@ -2346,15 +2354,15 @@ static inline void sony_init_output_report(struct sony_sc *sc, { sc->send_output_report = send_output_report; - if (!sc->worker_initialized) + if (!sc->state_worker_initialized) INIT_WORK(&sc->state_worker, sony_state_worker); - sc->worker_initialized = 1; + sc->state_worker_initialized = 1; } static inline void sony_cancel_work_sync(struct sony_sc *sc) { - if (sc->worker_initialized) + if (sc->state_worker_initialized) cancel_work_sync(&sc->state_worker); }