Lines Matching refs:pv

74 	struct wf_fcu_priv *pv = container_of(ref, struct wf_fcu_priv, ref);  in wf_fcu_release()  local
76 kfree(pv); in wf_fcu_release()
87 static int wf_fcu_read_reg(struct wf_fcu_priv *pv, int reg, in wf_fcu_read_reg() argument
92 mutex_lock(&pv->lock); in wf_fcu_read_reg()
97 nw = i2c_master_send(pv->i2c, buf, 1); in wf_fcu_read_reg()
110 nr = i2c_master_recv(pv->i2c, buf, nb); in wf_fcu_read_reg()
119 mutex_unlock(&pv->lock); in wf_fcu_read_reg()
123 static int wf_fcu_write_reg(struct wf_fcu_priv *pv, int reg, in wf_fcu_write_reg() argument
134 nw = i2c_master_send(pv->i2c, buf, nb); in wf_fcu_write_reg()
148 struct wf_fcu_priv *pv = fan->fcu_priv; in wf_fcu_fan_set_rpm() local
149 int rc, shift = pv->rpm_shift; in wf_fcu_fan_set_rpm()
161 rc = wf_fcu_write_reg(pv, 0x10 + (fan->id * 2), buf, 2); in wf_fcu_fan_set_rpm()
170 struct wf_fcu_priv *pv = fan->fcu_priv; in wf_fcu_fan_get_rpm() local
171 int rc, reg_base, shift = pv->rpm_shift; in wf_fcu_fan_get_rpm()
176 rc = wf_fcu_read_reg(pv, 0xb, &failure, 1); in wf_fcu_fan_get_rpm()
181 rc = wf_fcu_read_reg(pv, 0xd, &active, 1); in wf_fcu_fan_get_rpm()
193 rc = wf_fcu_read_reg(pv, reg_base + (fan->id * 2), buf, 2); in wf_fcu_fan_get_rpm()
205 struct wf_fcu_priv *pv = fan->fcu_priv; in wf_fcu_fan_set_pwm() local
218 rc = wf_fcu_write_reg(pv, 0x30 + (fan->id * 2), buf, 1); in wf_fcu_fan_set_pwm()
227 struct wf_fcu_priv *pv = fan->fcu_priv; in wf_fcu_fan_get_pwm() local
233 rc = wf_fcu_read_reg(pv, 0x2b, &failure, 1); in wf_fcu_fan_get_pwm()
238 rc = wf_fcu_read_reg(pv, 0x2d, &active, 1); in wf_fcu_fan_get_pwm()
244 rc = wf_fcu_read_reg(pv, 0x30 + (fan->id * 2), buf, 1); in wf_fcu_fan_get_pwm()
322 struct wf_fcu_priv *pv = fan->fcu_priv; in wf_fcu_get_rpmfan_minmax() local
327 fan->min = 2400 >> pv->rpm_shift; in wf_fcu_get_rpmfan_minmax()
328 fan->max = 56000 >> pv->rpm_shift; in wf_fcu_get_rpmfan_minmax()
362 static void wf_fcu_add_fan(struct wf_fcu_priv *pv, const char *name, in wf_fcu_add_fan() argument
370 fan->fcu_priv = pv; in wf_fcu_add_fan()
397 list_add(&fan->link, &pv->fan_list); in wf_fcu_add_fan()
398 kref_get(&pv->ref); in wf_fcu_add_fan()
401 static void wf_fcu_lookup_fans(struct wf_fcu_priv *pv) in wf_fcu_lookup_fans() argument
428 struct device_node *np = NULL, *fcu = pv->i2c->dev.of_node; in wf_fcu_lookup_fans()
477 wf_fcu_add_fan(pv, name, type, id); in wf_fcu_lookup_fans()
483 static void wf_fcu_default_fans(struct wf_fcu_priv *pv) in wf_fcu_default_fans() argument
489 wf_fcu_add_fan(pv, "backside-fan", FCU_FAN_PWM, 1); in wf_fcu_default_fans()
490 wf_fcu_add_fan(pv, "drive-bay-fan", FCU_FAN_RPM, 2); in wf_fcu_default_fans()
491 wf_fcu_add_fan(pv, "slots-fan", FCU_FAN_PWM, 2); in wf_fcu_default_fans()
492 wf_fcu_add_fan(pv, "cpu-front-fan-0", FCU_FAN_RPM, 3); in wf_fcu_default_fans()
493 wf_fcu_add_fan(pv, "cpu-rear-fan-0", FCU_FAN_RPM, 4); in wf_fcu_default_fans()
494 wf_fcu_add_fan(pv, "cpu-front-fan-1", FCU_FAN_RPM, 5); in wf_fcu_default_fans()
495 wf_fcu_add_fan(pv, "cpu-rear-fan-1", FCU_FAN_RPM, 6); in wf_fcu_default_fans()
498 static int wf_fcu_init_chip(struct wf_fcu_priv *pv) in wf_fcu_init_chip() argument
503 rc = wf_fcu_write_reg(pv, 0xe, &buf, 1); in wf_fcu_init_chip()
506 rc = wf_fcu_write_reg(pv, 0x2e, &buf, 1); in wf_fcu_init_chip()
509 rc = wf_fcu_read_reg(pv, 0, &buf, 1); in wf_fcu_init_chip()
512 pv->rpm_shift = (buf == 1) ? 2 : 3; in wf_fcu_init_chip()
515 pv->rpm_shift); in wf_fcu_init_chip()
523 struct wf_fcu_priv *pv; in wf_fcu_probe() local
525 pv = kzalloc(sizeof(*pv), GFP_KERNEL); in wf_fcu_probe()
526 if (!pv) in wf_fcu_probe()
529 kref_init(&pv->ref); in wf_fcu_probe()
530 mutex_init(&pv->lock); in wf_fcu_probe()
531 INIT_LIST_HEAD(&pv->fan_list); in wf_fcu_probe()
532 pv->i2c = client; in wf_fcu_probe()
538 if (wf_fcu_init_chip(pv)) { in wf_fcu_probe()
540 kfree(pv); in wf_fcu_probe()
545 wf_fcu_lookup_fans(pv); in wf_fcu_probe()
551 if (list_empty(&pv->fan_list)) in wf_fcu_probe()
552 wf_fcu_default_fans(pv); in wf_fcu_probe()
555 if (list_empty(&pv->fan_list)) { in wf_fcu_probe()
557 kfree(pv); in wf_fcu_probe()
561 dev_set_drvdata(&client->dev, pv); in wf_fcu_probe()
568 struct wf_fcu_priv *pv = dev_get_drvdata(&client->dev); in wf_fcu_remove() local
571 while (!list_empty(&pv->fan_list)) { in wf_fcu_remove()
572 fan = list_first_entry(&pv->fan_list, struct wf_fcu_fan, link); in wf_fcu_remove()
576 kref_put(&pv->ref, wf_fcu_release); in wf_fcu_remove()