Lines Matching refs:pv

73 	struct wf_fcu_priv *pv = container_of(ref, struct wf_fcu_priv, ref);
75 kfree(pv);
86 static int wf_fcu_read_reg(struct wf_fcu_priv *pv, int reg,
91 mutex_lock(&pv->lock);
96 nw = i2c_master_send(pv->i2c, buf, 1);
109 nr = i2c_master_recv(pv->i2c, buf, nb);
118 mutex_unlock(&pv->lock);
122 static int wf_fcu_write_reg(struct wf_fcu_priv *pv, int reg,
133 nw = i2c_master_send(pv->i2c, buf, nb);
147 struct wf_fcu_priv *pv = fan->fcu_priv;
148 int rc, shift = pv->rpm_shift;
160 rc = wf_fcu_write_reg(pv, 0x10 + (fan->id * 2), buf, 2);
169 struct wf_fcu_priv *pv = fan->fcu_priv;
170 int rc, reg_base, shift = pv->rpm_shift;
175 rc = wf_fcu_read_reg(pv, 0xb, &failure, 1);
180 rc = wf_fcu_read_reg(pv, 0xd, &active, 1);
192 rc = wf_fcu_read_reg(pv, reg_base + (fan->id * 2), buf, 2);
204 struct wf_fcu_priv *pv = fan->fcu_priv;
217 rc = wf_fcu_write_reg(pv, 0x30 + (fan->id * 2), buf, 1);
226 struct wf_fcu_priv *pv = fan->fcu_priv;
232 rc = wf_fcu_read_reg(pv, 0x2b, &failure, 1);
237 rc = wf_fcu_read_reg(pv, 0x2d, &active, 1);
243 rc = wf_fcu_read_reg(pv, 0x30 + (fan->id * 2), buf, 1);
321 struct wf_fcu_priv *pv = fan->fcu_priv;
326 fan->min = 2400 >> pv->rpm_shift;
327 fan->max = 56000 >> pv->rpm_shift;
361 static void wf_fcu_add_fan(struct wf_fcu_priv *pv, const char *name,
369 fan->fcu_priv = pv;
396 list_add(&fan->link, &pv->fan_list);
397 kref_get(&pv->ref);
400 static void wf_fcu_lookup_fans(struct wf_fcu_priv *pv)
427 struct device_node *np, *fcu = pv->i2c->dev.of_node;
474 wf_fcu_add_fan(pv, name, type, id);
480 static void wf_fcu_default_fans(struct wf_fcu_priv *pv)
486 wf_fcu_add_fan(pv, "backside-fan", FCU_FAN_PWM, 1);
487 wf_fcu_add_fan(pv, "drive-bay-fan", FCU_FAN_RPM, 2);
488 wf_fcu_add_fan(pv, "slots-fan", FCU_FAN_PWM, 2);
489 wf_fcu_add_fan(pv, "cpu-front-fan-0", FCU_FAN_RPM, 3);
490 wf_fcu_add_fan(pv, "cpu-rear-fan-0", FCU_FAN_RPM, 4);
491 wf_fcu_add_fan(pv, "cpu-front-fan-1", FCU_FAN_RPM, 5);
492 wf_fcu_add_fan(pv, "cpu-rear-fan-1", FCU_FAN_RPM, 6);
495 static int wf_fcu_init_chip(struct wf_fcu_priv *pv)
500 rc = wf_fcu_write_reg(pv, 0xe, &buf, 1);
503 rc = wf_fcu_write_reg(pv, 0x2e, &buf, 1);
506 rc = wf_fcu_read_reg(pv, 0, &buf, 1);
509 pv->rpm_shift = (buf == 1) ? 2 : 3;
512 pv->rpm_shift);
520 struct wf_fcu_priv *pv;
522 pv = kzalloc(sizeof(*pv), GFP_KERNEL);
523 if (!pv)
526 kref_init(&pv->ref);
527 mutex_init(&pv->lock);
528 INIT_LIST_HEAD(&pv->fan_list);
529 pv->i2c = client;
535 if (wf_fcu_init_chip(pv)) {
537 kfree(pv);
542 wf_fcu_lookup_fans(pv);
548 if (list_empty(&pv->fan_list))
549 wf_fcu_default_fans(pv);
552 if (list_empty(&pv->fan_list)) {
554 kfree(pv);
558 dev_set_drvdata(&client->dev, pv);
565 struct wf_fcu_priv *pv = dev_get_drvdata(&client->dev);
568 while (!list_empty(&pv->fan_list)) {
569 fan = list_first_entry(&pv->fan_list, struct wf_fcu_fan, link);
573 kref_put(&pv->ref, wf_fcu_release);