Lines Matching refs:phy

51 	struct s3fwrn5_i2c_phy *phy = phy_id;  in s3fwrn5_i2c_set_wake()  local
53 mutex_lock(&phy->mutex); in s3fwrn5_i2c_set_wake()
54 gpio_set_value(phy->gpio_fw_wake, wake); in s3fwrn5_i2c_set_wake()
56 mutex_unlock(&phy->mutex); in s3fwrn5_i2c_set_wake()
61 struct s3fwrn5_i2c_phy *phy = phy_id; in s3fwrn5_i2c_set_mode() local
63 mutex_lock(&phy->mutex); in s3fwrn5_i2c_set_mode()
65 if (phy->mode == mode) in s3fwrn5_i2c_set_mode()
68 phy->mode = mode; in s3fwrn5_i2c_set_mode()
70 gpio_set_value(phy->gpio_en, 1); in s3fwrn5_i2c_set_mode()
71 gpio_set_value(phy->gpio_fw_wake, 0); in s3fwrn5_i2c_set_mode()
73 gpio_set_value(phy->gpio_fw_wake, 1); in s3fwrn5_i2c_set_mode()
77 gpio_set_value(phy->gpio_en, 0); in s3fwrn5_i2c_set_mode()
81 phy->irq_skip = true; in s3fwrn5_i2c_set_mode()
84 mutex_unlock(&phy->mutex); in s3fwrn5_i2c_set_mode()
89 struct s3fwrn5_i2c_phy *phy = phy_id; in s3fwrn5_i2c_get_mode() local
92 mutex_lock(&phy->mutex); in s3fwrn5_i2c_get_mode()
94 mode = phy->mode; in s3fwrn5_i2c_get_mode()
96 mutex_unlock(&phy->mutex); in s3fwrn5_i2c_get_mode()
103 struct s3fwrn5_i2c_phy *phy = phy_id; in s3fwrn5_i2c_write() local
106 mutex_lock(&phy->mutex); in s3fwrn5_i2c_write()
108 phy->irq_skip = false; in s3fwrn5_i2c_write()
110 ret = i2c_master_send(phy->i2c_dev, skb->data, skb->len); in s3fwrn5_i2c_write()
114 ret = i2c_master_send(phy->i2c_dev, skb->data, skb->len); in s3fwrn5_i2c_write()
117 mutex_unlock(&phy->mutex); in s3fwrn5_i2c_write()
135 static int s3fwrn5_i2c_read(struct s3fwrn5_i2c_phy *phy) in s3fwrn5_i2c_read() argument
143 hdr_size = (phy->mode == S3FWRN5_MODE_NCI) ? in s3fwrn5_i2c_read()
145 ret = i2c_master_recv(phy->i2c_dev, hdr, hdr_size); in s3fwrn5_i2c_read()
152 data_len = (phy->mode == S3FWRN5_MODE_NCI) ? in s3fwrn5_i2c_read()
165 ret = i2c_master_recv(phy->i2c_dev, skb_put(skb, data_len), data_len); in s3fwrn5_i2c_read()
172 return s3fwrn5_recv_frame(phy->ndev, skb, phy->mode); in s3fwrn5_i2c_read()
177 struct s3fwrn5_i2c_phy *phy = phy_id; in s3fwrn5_i2c_irq_thread_fn() local
180 if (!phy || !phy->ndev) { in s3fwrn5_i2c_irq_thread_fn()
185 mutex_lock(&phy->mutex); in s3fwrn5_i2c_irq_thread_fn()
187 if (phy->irq_skip) in s3fwrn5_i2c_irq_thread_fn()
190 switch (phy->mode) { in s3fwrn5_i2c_irq_thread_fn()
193 ret = s3fwrn5_i2c_read(phy); in s3fwrn5_i2c_irq_thread_fn()
201 mutex_unlock(&phy->mutex); in s3fwrn5_i2c_irq_thread_fn()
208 struct s3fwrn5_i2c_phy *phy = i2c_get_clientdata(client); in s3fwrn5_i2c_parse_dt() local
214 phy->gpio_en = of_get_named_gpio(np, "s3fwrn5,en-gpios", 0); in s3fwrn5_i2c_parse_dt()
215 if (!gpio_is_valid(phy->gpio_en)) in s3fwrn5_i2c_parse_dt()
218 phy->gpio_fw_wake = of_get_named_gpio(np, "s3fwrn5,fw-gpios", 0); in s3fwrn5_i2c_parse_dt()
219 if (!gpio_is_valid(phy->gpio_fw_wake)) in s3fwrn5_i2c_parse_dt()
228 struct s3fwrn5_i2c_phy *phy; in s3fwrn5_i2c_probe() local
231 phy = devm_kzalloc(&client->dev, sizeof(*phy), GFP_KERNEL); in s3fwrn5_i2c_probe()
232 if (!phy) in s3fwrn5_i2c_probe()
235 mutex_init(&phy->mutex); in s3fwrn5_i2c_probe()
236 phy->mode = S3FWRN5_MODE_COLD; in s3fwrn5_i2c_probe()
237 phy->irq_skip = true; in s3fwrn5_i2c_probe()
239 phy->i2c_dev = client; in s3fwrn5_i2c_probe()
240 i2c_set_clientdata(client, phy); in s3fwrn5_i2c_probe()
246 ret = devm_gpio_request_one(&phy->i2c_dev->dev, phy->gpio_en, in s3fwrn5_i2c_probe()
251 ret = devm_gpio_request_one(&phy->i2c_dev->dev, phy->gpio_fw_wake, in s3fwrn5_i2c_probe()
256 ret = s3fwrn5_probe(&phy->ndev, phy, &phy->i2c_dev->dev, &i2c_phy_ops, in s3fwrn5_i2c_probe()
261 ret = devm_request_threaded_irq(&client->dev, phy->i2c_dev->irq, NULL, in s3fwrn5_i2c_probe()
263 S3FWRN5_I2C_DRIVER_NAME, phy); in s3fwrn5_i2c_probe()
265 s3fwrn5_remove(phy->ndev); in s3fwrn5_i2c_probe()
272 struct s3fwrn5_i2c_phy *phy = i2c_get_clientdata(client); in s3fwrn5_i2c_remove() local
274 s3fwrn5_remove(phy->ndev); in s3fwrn5_i2c_remove()