Lines Matching defs:i2cd
61 static void gpu_enable_i2c_bus(struct gpu_i2c_dev *i2cd)
66 val = readl(i2cd->regs + I2C_MST_HYBRID_PADCTL);
70 writel(val, i2cd->regs + I2C_MST_HYBRID_PADCTL);
77 writel(val, i2cd->regs + I2C_MST_I2C0_TIMING);
80 static int gpu_i2c_check_status(struct gpu_i2c_dev *i2cd)
85 ret = readl_poll_timeout(i2cd->regs + I2C_MST_CNTL, val,
91 dev_err(i2cd->dev, "i2c timeout error %x\n", val);
95 val = readl(i2cd->regs + I2C_MST_CNTL);
108 static int gpu_i2c_read(struct gpu_i2c_dev *i2cd, u8 *data, u16 len)
116 writel(val, i2cd->regs + I2C_MST_CNTL);
118 status = gpu_i2c_check_status(i2cd);
122 val = readl(i2cd->regs + I2C_MST_DATA);
142 static int gpu_i2c_start(struct gpu_i2c_dev *i2cd)
144 writel(I2C_MST_CNTL_GEN_START, i2cd->regs + I2C_MST_CNTL);
145 return gpu_i2c_check_status(i2cd);
148 static int gpu_i2c_stop(struct gpu_i2c_dev *i2cd)
150 writel(I2C_MST_CNTL_GEN_STOP, i2cd->regs + I2C_MST_CNTL);
151 return gpu_i2c_check_status(i2cd);
154 static int gpu_i2c_write(struct gpu_i2c_dev *i2cd, u8 data)
158 writel(data, i2cd->regs + I2C_MST_DATA);
161 writel(val, i2cd->regs + I2C_MST_CNTL);
163 return gpu_i2c_check_status(i2cd);
169 struct gpu_i2c_dev *i2cd = i2c_get_adapdata(adap);
178 pm_runtime_get_sync(i2cd->dev);
182 writel(msgs[i].addr, i2cd->regs + I2C_MST_ADDR);
184 status = gpu_i2c_read(i2cd, msgs[i].buf, msgs[i].len);
190 status = gpu_i2c_start(i2cd);
197 status = gpu_i2c_write(i2cd, addr);
202 status = gpu_i2c_write(i2cd, msgs[i].buf[j]);
209 status = gpu_i2c_stop(i2cd);
216 status2 = gpu_i2c_stop(i2cd);
218 dev_err(i2cd->dev, "i2c stop failed %d\n", status2);
220 pm_runtime_mark_last_busy(i2cd->dev);
221 pm_runtime_put_autosuspend(i2cd->dev);
277 struct gpu_i2c_dev *i2cd;
280 i2cd = devm_kzalloc(dev, sizeof(*i2cd), GFP_KERNEL);
281 if (!i2cd)
284 i2cd->dev = dev;
285 dev_set_drvdata(dev, i2cd);
293 i2cd->regs = pcim_iomap(pdev, 0, 0);
294 if (!i2cd->regs)
301 gpu_enable_i2c_bus(i2cd);
303 i2c_set_adapdata(&i2cd->adapter, i2cd);
304 i2cd->adapter.owner = THIS_MODULE;
305 strscpy(i2cd->adapter.name, "NVIDIA GPU I2C adapter",
306 sizeof(i2cd->adapter.name));
307 i2cd->adapter.algo = &gpu_i2c_algorithm;
308 i2cd->adapter.quirks = &gpu_i2c_quirks;
309 i2cd->adapter.dev.parent = dev;
310 status = i2c_add_adapter(&i2cd->adapter);
314 i2cd->ccgx_client = i2c_new_ccgx_ucsi(&i2cd->adapter, pdev->irq, &ccgx_node);
315 if (IS_ERR(i2cd->ccgx_client)) {
316 status = dev_err_probe(dev, PTR_ERR(i2cd->ccgx_client), "register UCSI failed\n");
328 i2c_del_adapter(&i2cd->adapter);
336 struct gpu_i2c_dev *i2cd = pci_get_drvdata(pdev);
338 pm_runtime_get_noresume(i2cd->dev);
339 i2c_del_adapter(&i2cd->adapter);
347 struct gpu_i2c_dev *i2cd = dev_get_drvdata(dev);
349 gpu_enable_i2c_bus(i2cd);
356 pm_request_resume(&i2cd->ccgx_client->dev);