diff --git a/drivers/hid/hid-nintendo.c b/drivers/hid/hid-nintendo.c index 250f5d2f888a..51e12aaec2b9 100644 --- a/drivers/hid/hid-nintendo.c +++ b/drivers/hid/hid-nintendo.c @@ -401,7 +401,7 @@ struct joycon_input_report { #define JC_MAX_RESP_SIZE (sizeof(struct joycon_input_report) + 35) #define JC_RUMBLE_DATA_SIZE 8 -#define JC_RUMBLE_QUEUE_SIZE 8 +#define JC_RUMBLE_QUEUE_SIZE 4 static const char * const joycon_player_led_names[] = { LED_FUNCTION_PLAYER1, @@ -468,8 +468,7 @@ struct joycon_ctlr { u16 rumble_lh_freq; u16 rumble_rl_freq; u16 rumble_rh_freq; - unsigned short rumble_zero_countdown; - + /* imu */ struct input_dev *imu_input; bool imu_first_packet_received; /* helps in initiating timestamp */ @@ -548,10 +547,10 @@ static void joycon_wait_for_input_report(struct joycon_ctlr *ctlr) #define JC_INPUT_REPORT_MIN_DELTA 8 #define JC_INPUT_REPORT_MAX_DELTA 17 #define JC_SUBCMD_TX_OFFSET_MS 4 -#define JC_SUBCMD_VALID_DELTA_REQ 3 +#define JC_SUBCMD_VALID_DELTA_REQ 0 #define JC_SUBCMD_RATE_MAX_ATTEMPTS 500 #define JC_SUBCMD_RATE_LIMITER_USB_MS 20 -#define JC_SUBCMD_RATE_LIMITER_BT_MS 60 +#define JC_SUBCMD_RATE_LIMITER_BT_MS 50 #define JC_SUBCMD_RATE_LIMITER_MS(ctlr) ((ctlr)->hdev->bus == BUS_USB ? JC_SUBCMD_RATE_LIMITER_USB_MS : JC_SUBCMD_RATE_LIMITER_BT_MS) static void joycon_enforce_subcmd_rate(struct joycon_ctlr *ctlr) { @@ -1266,16 +1265,7 @@ static void joycon_parse_report(struct joycon_ctlr *ctlr, if (IS_ENABLED(CONFIG_NINTENDO_FF) && rep->vibrator_report && ctlr->ctlr_state != JOYCON_CTLR_STATE_REMOVED && (msecs - ctlr->rumble_msecs) >= JC_RUMBLE_PERIOD_MS && - (ctlr->rumble_queue_head != ctlr->rumble_queue_tail || - ctlr->rumble_zero_countdown > 0)) { - /* - * When this value reaches 0, we know we've sent multiple - * packets to the controller instructing it to disable rumble. - * We can safely stop sending periodic rumble packets until the - * next ff effect. - */ - if (ctlr->rumble_zero_countdown > 0) - ctlr->rumble_zero_countdown--; + ctlr->rumble_queue_head != ctlr->rumble_queue_tail) { queue_work(ctlr->rumble_queue, &ctlr->rumble_worker); } @@ -1597,9 +1587,6 @@ static int joycon_set_rumble(struct joycon_ctlr *ctlr, u16 amp_r, u16 amp_l, freq_r_high = ctlr->rumble_rh_freq; freq_l_low = ctlr->rumble_ll_freq; freq_l_high = ctlr->rumble_lh_freq; - /* limit number of silent rumble packets to reduce traffic */ - if (amp_l != 0 || amp_r != 0) - ctlr->rumble_zero_countdown = JC_RUMBLE_ZERO_AMP_PKT_CNT; spin_unlock_irqrestore(&ctlr->lock, flags); /* right joy-con */