Lines Matching refs:pad
75 static int psxpad_command(struct psxpad *pad, const u8 sendcmdlen)
78 .tx_buf = pad->sendbuf,
79 .rx_buf = pad->response,
84 err = spi_sync_transfer(pad->spi, &xfers, 1);
86 dev_err(&pad->spi->dev,
96 static void psxpad_control_motor(struct psxpad *pad,
101 pad->motor1enable = motor1enable;
102 pad->motor2enable = motor2enable;
104 memcpy(pad->sendbuf, PSX_CMD_ENTER_CFG, sizeof(PSX_CMD_ENTER_CFG));
105 err = psxpad_command(pad, sizeof(PSX_CMD_ENTER_CFG));
107 dev_err(&pad->spi->dev,
113 memcpy(pad->sendbuf, PSX_CMD_ENABLE_MOTOR,
115 pad->sendbuf[3] = pad->motor1enable ? 0x00 : 0xFF;
116 pad->sendbuf[4] = pad->motor2enable ? 0x80 : 0xFF;
117 err = psxpad_command(pad, sizeof(PSX_CMD_ENABLE_MOTOR));
119 dev_err(&pad->spi->dev,
125 memcpy(pad->sendbuf, PSX_CMD_EXIT_CFG, sizeof(PSX_CMD_EXIT_CFG));
126 err = psxpad_command(pad, sizeof(PSX_CMD_EXIT_CFG));
128 dev_err(&pad->spi->dev,
135 static void psxpad_set_motor_level(struct psxpad *pad,
138 pad->motor1level = motor1level ? 0xFF : 0x00;
139 pad->motor2level = REVERSE_BIT(motor2level);
145 struct psxpad *pad = input_get_drvdata(idev);
149 psxpad_set_motor_level(pad,
158 static int psxpad_spi_init_ff(struct psxpad *pad)
162 input_set_capability(pad->idev, EV_FF, FF_RUMBLE);
164 err = input_ff_create_memless(pad->idev, NULL, psxpad_spi_play_effect);
166 dev_err(&pad->spi->dev,
176 static void psxpad_control_motor(struct psxpad *pad,
181 static void psxpad_set_motor_level(struct psxpad *pad,
186 static inline int psxpad_spi_init_ff(struct psxpad *pad)
194 struct psxpad *pad = input_get_drvdata(input);
196 pm_runtime_get_sync(&pad->spi->dev);
203 struct psxpad *pad = input_get_drvdata(input);
205 pm_runtime_put_sync(&pad->spi->dev);
210 struct psxpad *pad = input_get_drvdata(input);
214 psxpad_control_motor(pad, true, true);
216 memcpy(pad->sendbuf, PSX_CMD_POLL, sizeof(PSX_CMD_POLL));
217 pad->sendbuf[3] = pad->motor1enable ? pad->motor1level : 0x00;
218 pad->sendbuf[4] = pad->motor2enable ? pad->motor2level : 0x00;
219 err = psxpad_command(pad, sizeof(PSX_CMD_POLL));
221 dev_err(&pad->spi->dev,
226 switch (pad->response[1]) {
229 b_rsp3 = ~pad->response[3];
230 b_rsp4 = ~pad->response[4];
232 input_report_abs(input, ABS_X, REVERSE_BIT(pad->response[7]));
233 input_report_abs(input, ABS_Y, REVERSE_BIT(pad->response[8]));
234 input_report_abs(input, ABS_RX, REVERSE_BIT(pad->response[5]));
235 input_report_abs(input, ABS_RY, REVERSE_BIT(pad->response[6]));
256 b_rsp3 = ~pad->response[3];
257 b_rsp4 = ~pad->response[4];
287 struct psxpad *pad;
291 pad = devm_kzalloc(&spi->dev, sizeof(struct psxpad), GFP_KERNEL);
292 if (!pad)
302 pad->idev = idev;
303 pad->spi = spi;
306 input_set_drvdata(idev, pad);
309 snprintf(pad->phys, sizeof(pad->phys), "%s/input", dev_name(&spi->dev));
337 err = psxpad_spi_init_ff(pad);
349 /* pad settings */
350 psxpad_set_motor_level(pad, 0, 0);
380 struct psxpad *pad = spi_get_drvdata(spi);
382 psxpad_set_motor_level(pad, 0, 0);