Lines Matching refs:chip

56 static int max8997_haptic_set_duty_cycle(struct max8997_haptic *chip)
60 if (chip->mode == MAX8997_EXTERNAL_MODE) {
61 unsigned int duty = chip->pwm_period * chip->level / 100;
62 ret = pwm_config(chip->pwm, duty, chip->pwm_period);
68 if (chip->level <= i * 100 / 64) {
73 switch (chip->internal_mode_pattern) {
75 max8997_write_reg(chip->client,
79 max8997_write_reg(chip->client,
83 max8997_write_reg(chip->client,
87 max8997_write_reg(chip->client,
97 static void max8997_haptic_configure(struct max8997_haptic *chip)
101 value = chip->type << MAX8997_MOTOR_TYPE_SHIFT |
102 chip->enabled << MAX8997_ENABLE_SHIFT |
103 chip->mode << MAX8997_MODE_SHIFT | chip->pwm_divisor;
104 max8997_write_reg(chip->client, MAX8997_HAPTIC_REG_CONF2, value);
106 if (chip->mode == MAX8997_INTERNAL_MODE && chip->enabled) {
107 value = chip->internal_mode_pattern << MAX8997_CYCLE_SHIFT |
108 chip->internal_mode_pattern << MAX8997_SIG_PERIOD_SHIFT |
109 chip->internal_mode_pattern << MAX8997_SIG_DUTY_SHIFT |
110 chip->internal_mode_pattern << MAX8997_PWM_DUTY_SHIFT;
111 max8997_write_reg(chip->client,
114 switch (chip->internal_mode_pattern) {
116 value = chip->pattern_cycle << 4;
117 max8997_write_reg(chip->client,
119 value = chip->pattern_signal_period;
120 max8997_write_reg(chip->client,
125 value = chip->pattern_cycle;
126 max8997_write_reg(chip->client,
128 value = chip->pattern_signal_period;
129 max8997_write_reg(chip->client,
134 value = chip->pattern_cycle << 4;
135 max8997_write_reg(chip->client,
137 value = chip->pattern_signal_period;
138 max8997_write_reg(chip->client,
143 value = chip->pattern_cycle;
144 max8997_write_reg(chip->client,
146 value = chip->pattern_signal_period;
147 max8997_write_reg(chip->client,
157 static void max8997_haptic_enable(struct max8997_haptic *chip)
161 mutex_lock(&chip->mutex);
163 error = max8997_haptic_set_duty_cycle(chip);
165 dev_err(chip->dev, "set_pwm_cycle failed, error: %d\n", error);
169 if (!chip->enabled) {
170 error = regulator_enable(chip->regulator);
172 dev_err(chip->dev, "Failed to enable regulator\n");
175 max8997_haptic_configure(chip);
176 if (chip->mode == MAX8997_EXTERNAL_MODE) {
177 error = pwm_enable(chip->pwm);
179 dev_err(chip->dev, "Failed to enable PWM\n");
180 regulator_disable(chip->regulator);
184 chip->enabled = true;
188 mutex_unlock(&chip->mutex);
191 static void max8997_haptic_disable(struct max8997_haptic *chip)
193 mutex_lock(&chip->mutex);
195 if (chip->enabled) {
196 chip->enabled = false;
197 max8997_haptic_configure(chip);
198 if (chip->mode == MAX8997_EXTERNAL_MODE)
199 pwm_disable(chip->pwm);
200 regulator_disable(chip->regulator);
203 mutex_unlock(&chip->mutex);
208 struct max8997_haptic *chip =
211 if (chip->level)
212 max8997_haptic_enable(chip);
214 max8997_haptic_disable(chip);
220 struct max8997_haptic *chip = input_get_drvdata(dev);
222 chip->level = effect->u.rumble.strong_magnitude;
223 if (!chip->level)
224 chip->level = effect->u.rumble.weak_magnitude;
226 schedule_work(&chip->work);
233 struct max8997_haptic *chip = input_get_drvdata(dev);
235 cancel_work_sync(&chip->work);
236 max8997_haptic_disable(chip);
245 struct max8997_haptic *chip;
257 chip = kzalloc(sizeof(struct max8997_haptic), GFP_KERNEL);
259 if (!chip || !input_dev) {
265 INIT_WORK(&chip->work, max8997_haptic_play_effect_work);
266 mutex_init(&chip->mutex);
268 chip->client = iodev->haptic;
269 chip->dev = &pdev->dev;
270 chip->input_dev = input_dev;
271 chip->pwm_period = haptic_pdata->pwm_period;
272 chip->type = haptic_pdata->type;
273 chip->mode = haptic_pdata->mode;
274 chip->pwm_divisor = haptic_pdata->pwm_divisor;
276 switch (chip->mode) {
278 chip->internal_mode_pattern =
280 chip->pattern_cycle = haptic_pdata->pattern_cycle;
281 chip->pattern_signal_period =
286 chip->pwm = pwm_request(haptic_pdata->pwm_channel_id,
288 if (IS_ERR(chip->pwm)) {
289 error = PTR_ERR(chip->pwm);
300 pwm_apply_args(chip->pwm);
305 "Invalid chip mode specified (%d)\n", chip->mode);
310 chip->regulator = regulator_get(&pdev->dev, "inmotor");
311 if (IS_ERR(chip->regulator)) {
312 error = PTR_ERR(chip->regulator);
323 input_set_drvdata(input_dev, chip);
343 platform_set_drvdata(pdev, chip);
349 regulator_put(chip->regulator);
351 if (chip->mode == MAX8997_EXTERNAL_MODE)
352 pwm_free(chip->pwm);
355 kfree(chip);
362 struct max8997_haptic *chip = platform_get_drvdata(pdev);
364 input_unregister_device(chip->input_dev);
365 regulator_put(chip->regulator);
367 if (chip->mode == MAX8997_EXTERNAL_MODE)
368 pwm_free(chip->pwm);
370 kfree(chip);
378 struct max8997_haptic *chip = platform_get_drvdata(pdev);
380 max8997_haptic_disable(chip);