Lines Matching refs:pad
72 static int psxpad_command(struct psxpad *pad, const u8 sendcmdlen)
75 .tx_buf = pad->sendbuf,
76 .rx_buf = pad->response,
81 err = spi_sync_transfer(pad->spi, &xfers, 1);
83 dev_err(&pad->spi->dev,
93 static void psxpad_control_motor(struct psxpad *pad,
98 pad->motor1enable = motor1enable;
99 pad->motor2enable = motor2enable;
101 memcpy(pad->sendbuf, PSX_CMD_ENTER_CFG, sizeof(PSX_CMD_ENTER_CFG));
102 err = psxpad_command(pad, sizeof(PSX_CMD_ENTER_CFG));
104 dev_err(&pad->spi->dev,
110 memcpy(pad->sendbuf, PSX_CMD_ENABLE_MOTOR,
112 pad->sendbuf[3] = pad->motor1enable ? 0x00 : 0xFF;
113 pad->sendbuf[4] = pad->motor2enable ? 0x80 : 0xFF;
114 err = psxpad_command(pad, sizeof(PSX_CMD_ENABLE_MOTOR));
116 dev_err(&pad->spi->dev,
122 memcpy(pad->sendbuf, PSX_CMD_EXIT_CFG, sizeof(PSX_CMD_EXIT_CFG));
123 err = psxpad_command(pad, sizeof(PSX_CMD_EXIT_CFG));
125 dev_err(&pad->spi->dev,
132 static void psxpad_set_motor_level(struct psxpad *pad,
135 pad->motor1level = motor1level ? 0xFF : 0x00;
136 pad->motor2level = REVERSE_BIT(motor2level);
142 struct psxpad *pad = input_get_drvdata(idev);
146 psxpad_set_motor_level(pad,
155 static int psxpad_spi_init_ff(struct psxpad *pad)
159 input_set_capability(pad->idev, EV_FF, FF_RUMBLE);
161 err = input_ff_create_memless(pad->idev, NULL, psxpad_spi_play_effect);
163 dev_err(&pad->spi->dev,
173 static void psxpad_control_motor(struct psxpad *pad,
178 static void psxpad_set_motor_level(struct psxpad *pad,
183 static inline int psxpad_spi_init_ff(struct psxpad *pad)
191 struct psxpad *pad = input_get_drvdata(input);
193 pm_runtime_get_sync(&pad->spi->dev);
200 struct psxpad *pad = input_get_drvdata(input);
202 pm_runtime_put_sync(&pad->spi->dev);
207 struct psxpad *pad = input_get_drvdata(input);
211 psxpad_control_motor(pad, true, true);
213 memcpy(pad->sendbuf, PSX_CMD_POLL, sizeof(PSX_CMD_POLL));
214 pad->sendbuf[3] = pad->motor1enable ? pad->motor1level : 0x00;
215 pad->sendbuf[4] = pad->motor2enable ? pad->motor2level : 0x00;
216 err = psxpad_command(pad, sizeof(PSX_CMD_POLL));
218 dev_err(&pad->spi->dev,
223 switch (pad->response[1]) {
226 b_rsp3 = ~pad->response[3];
227 b_rsp4 = ~pad->response[4];
229 input_report_abs(input, ABS_X, REVERSE_BIT(pad->response[7]));
230 input_report_abs(input, ABS_Y, REVERSE_BIT(pad->response[8]));
231 input_report_abs(input, ABS_RX, REVERSE_BIT(pad->response[5]));
232 input_report_abs(input, ABS_RY, REVERSE_BIT(pad->response[6]));
253 b_rsp3 = ~pad->response[3];
254 b_rsp4 = ~pad->response[4];
284 struct psxpad *pad;
288 pad = devm_kzalloc(&spi->dev, sizeof(struct psxpad), GFP_KERNEL);
289 if (!pad)
299 pad->idev = idev;
300 pad->spi = spi;
303 input_set_drvdata(idev, pad);
306 snprintf(pad->phys, sizeof(pad->phys), "%s/input", dev_name(&spi->dev));
334 err = psxpad_spi_init_ff(pad);
346 /* pad settings */
347 psxpad_set_motor_level(pad, 0, 0);
377 struct psxpad *pad = spi_get_drvdata(spi);
379 psxpad_set_motor_level(pad, 0, 0);