Lines Matching refs:pad
73 static int psxpad_command(struct psxpad *pad, const u8 sendcmdlen) in psxpad_command() argument
76 .tx_buf = pad->sendbuf, in psxpad_command()
77 .rx_buf = pad->response, in psxpad_command()
82 err = spi_sync_transfer(pad->spi, &xfers, 1); in psxpad_command()
84 dev_err(&pad->spi->dev, in psxpad_command()
94 static void psxpad_control_motor(struct psxpad *pad, in psxpad_control_motor() argument
99 pad->motor1enable = motor1enable; in psxpad_control_motor()
100 pad->motor2enable = motor2enable; in psxpad_control_motor()
102 memcpy(pad->sendbuf, PSX_CMD_ENTER_CFG, sizeof(PSX_CMD_ENTER_CFG)); in psxpad_control_motor()
103 err = psxpad_command(pad, sizeof(PSX_CMD_ENTER_CFG)); in psxpad_control_motor()
105 dev_err(&pad->spi->dev, in psxpad_control_motor()
111 memcpy(pad->sendbuf, PSX_CMD_ENABLE_MOTOR, in psxpad_control_motor()
113 pad->sendbuf[3] = pad->motor1enable ? 0x00 : 0xFF; in psxpad_control_motor()
114 pad->sendbuf[4] = pad->motor2enable ? 0x80 : 0xFF; in psxpad_control_motor()
115 err = psxpad_command(pad, sizeof(PSX_CMD_ENABLE_MOTOR)); in psxpad_control_motor()
117 dev_err(&pad->spi->dev, in psxpad_control_motor()
123 memcpy(pad->sendbuf, PSX_CMD_EXIT_CFG, sizeof(PSX_CMD_EXIT_CFG)); in psxpad_control_motor()
124 err = psxpad_command(pad, sizeof(PSX_CMD_EXIT_CFG)); in psxpad_control_motor()
126 dev_err(&pad->spi->dev, in psxpad_control_motor()
133 static void psxpad_set_motor_level(struct psxpad *pad, in psxpad_set_motor_level() argument
136 pad->motor1level = motor1level ? 0xFF : 0x00; in psxpad_set_motor_level()
137 pad->motor2level = REVERSE_BIT(motor2level); in psxpad_set_motor_level()
144 struct psxpad *pad = pdev->private; in psxpad_spi_play_effect() local
148 psxpad_set_motor_level(pad, in psxpad_spi_play_effect()
157 static int psxpad_spi_init_ff(struct psxpad *pad) in psxpad_spi_init_ff() argument
161 input_set_capability(pad->pdev->input, EV_FF, FF_RUMBLE); in psxpad_spi_init_ff()
163 err = input_ff_create_memless(pad->pdev->input, NULL, in psxpad_spi_init_ff()
166 dev_err(&pad->spi->dev, in psxpad_spi_init_ff()
176 static void psxpad_control_motor(struct psxpad *pad, in psxpad_control_motor() argument
181 static void psxpad_set_motor_level(struct psxpad *pad, in psxpad_set_motor_level() argument
186 static inline int psxpad_spi_init_ff(struct psxpad *pad) in psxpad_spi_init_ff() argument
194 struct psxpad *pad = pdev->private; in psxpad_spi_poll_open() local
196 pm_runtime_get_sync(&pad->spi->dev); in psxpad_spi_poll_open()
201 struct psxpad *pad = pdev->private; in psxpad_spi_poll_close() local
203 pm_runtime_put_sync(&pad->spi->dev); in psxpad_spi_poll_close()
208 struct psxpad *pad = pdev->private; in psxpad_spi_poll() local
213 psxpad_control_motor(pad, true, true); in psxpad_spi_poll()
215 memcpy(pad->sendbuf, PSX_CMD_POLL, sizeof(PSX_CMD_POLL)); in psxpad_spi_poll()
216 pad->sendbuf[3] = pad->motor1enable ? pad->motor1level : 0x00; in psxpad_spi_poll()
217 pad->sendbuf[4] = pad->motor2enable ? pad->motor2level : 0x00; in psxpad_spi_poll()
218 err = psxpad_command(pad, sizeof(PSX_CMD_POLL)); in psxpad_spi_poll()
220 dev_err(&pad->spi->dev, in psxpad_spi_poll()
225 switch (pad->response[1]) { in psxpad_spi_poll()
228 b_rsp3 = ~pad->response[3]; in psxpad_spi_poll()
229 b_rsp4 = ~pad->response[4]; in psxpad_spi_poll()
231 input_report_abs(input, ABS_X, REVERSE_BIT(pad->response[7])); in psxpad_spi_poll()
232 input_report_abs(input, ABS_Y, REVERSE_BIT(pad->response[8])); in psxpad_spi_poll()
233 input_report_abs(input, ABS_RX, REVERSE_BIT(pad->response[5])); in psxpad_spi_poll()
234 input_report_abs(input, ABS_RY, REVERSE_BIT(pad->response[6])); in psxpad_spi_poll()
255 b_rsp3 = ~pad->response[3]; in psxpad_spi_poll()
256 b_rsp4 = ~pad->response[4]; in psxpad_spi_poll()
286 struct psxpad *pad; in psxpad_spi_probe() local
291 pad = devm_kzalloc(&spi->dev, sizeof(struct psxpad), GFP_KERNEL); in psxpad_spi_probe()
292 if (!pad) in psxpad_spi_probe()
302 pad->pdev = pdev; in psxpad_spi_probe()
303 pad->spi = spi; in psxpad_spi_probe()
305 pdev->private = pad; in psxpad_spi_probe()
317 snprintf(pad->phys, sizeof(pad->phys), "%s/input", dev_name(&spi->dev)); in psxpad_spi_probe()
342 err = psxpad_spi_init_ff(pad); in psxpad_spi_probe()
355 psxpad_set_motor_level(pad, 0, 0); in psxpad_spi_probe()
373 struct psxpad *pad = spi_get_drvdata(spi); in psxpad_spi_suspend() local
375 psxpad_set_motor_level(pad, 0, 0); in psxpad_spi_suspend()