Lines Matching defs:i2cd

58 static void gpu_enable_i2c_bus(struct gpu_i2c_dev *i2cd)
63 val = readl(i2cd->regs + I2C_MST_HYBRID_PADCTL);
67 writel(val, i2cd->regs + I2C_MST_HYBRID_PADCTL);
74 writel(val, i2cd->regs + I2C_MST_I2C0_TIMING);
77 static int gpu_i2c_check_status(struct gpu_i2c_dev *i2cd)
82 ret = readl_poll_timeout(i2cd->regs + I2C_MST_CNTL, val,
88 dev_err(i2cd->dev, "i2c timeout error %x\n", val);
92 val = readl(i2cd->regs + I2C_MST_CNTL);
105 static int gpu_i2c_read(struct gpu_i2c_dev *i2cd, u8 *data, u16 len)
113 writel(val, i2cd->regs + I2C_MST_CNTL);
115 status = gpu_i2c_check_status(i2cd);
119 val = readl(i2cd->regs + I2C_MST_DATA);
139 static int gpu_i2c_start(struct gpu_i2c_dev *i2cd)
141 writel(I2C_MST_CNTL_GEN_START, i2cd->regs + I2C_MST_CNTL);
142 return gpu_i2c_check_status(i2cd);
145 static int gpu_i2c_stop(struct gpu_i2c_dev *i2cd)
147 writel(I2C_MST_CNTL_GEN_STOP, i2cd->regs + I2C_MST_CNTL);
148 return gpu_i2c_check_status(i2cd);
151 static int gpu_i2c_write(struct gpu_i2c_dev *i2cd, u8 data)
155 writel(data, i2cd->regs + I2C_MST_DATA);
158 writel(val, i2cd->regs + I2C_MST_CNTL);
160 return gpu_i2c_check_status(i2cd);
166 struct gpu_i2c_dev *i2cd = i2c_get_adapdata(adap);
175 pm_runtime_get_sync(i2cd->dev);
179 writel(msgs[i].addr, i2cd->regs + I2C_MST_ADDR);
181 status = gpu_i2c_read(i2cd, msgs[i].buf, msgs[i].len);
187 status = gpu_i2c_start(i2cd);
194 status = gpu_i2c_write(i2cd, addr);
199 status = gpu_i2c_write(i2cd, msgs[i].buf[j]);
206 status = gpu_i2c_stop(i2cd);
213 status2 = gpu_i2c_stop(i2cd);
215 dev_err(i2cd->dev, "i2c stop failed %d\n", status2);
217 pm_runtime_mark_last_busy(i2cd->dev);
218 pm_runtime_put_autosuspend(i2cd->dev);
265 static int gpu_populate_client(struct gpu_i2c_dev *i2cd, int irq)
267 i2cd->gpu_ccgx_ucsi = devm_kzalloc(i2cd->dev,
268 sizeof(*i2cd->gpu_ccgx_ucsi),
270 if (!i2cd->gpu_ccgx_ucsi)
273 strlcpy(i2cd->gpu_ccgx_ucsi->type, "ccgx-ucsi",
274 sizeof(i2cd->gpu_ccgx_ucsi->type));
275 i2cd->gpu_ccgx_ucsi->addr = 0x8;
276 i2cd->gpu_ccgx_ucsi->irq = irq;
277 i2cd->gpu_ccgx_ucsi->properties = ccgx_props;
278 i2cd->ccgx_client = i2c_new_client_device(&i2cd->adapter, i2cd->gpu_ccgx_ucsi);
279 return PTR_ERR_OR_ZERO(i2cd->ccgx_client);
284 struct gpu_i2c_dev *i2cd;
287 i2cd = devm_kzalloc(&pdev->dev, sizeof(*i2cd), GFP_KERNEL);
288 if (!i2cd)
291 i2cd->dev = &pdev->dev;
292 dev_set_drvdata(&pdev->dev, i2cd);
302 i2cd->regs = pcim_iomap(pdev, 0, 0);
303 if (!i2cd->regs) {
314 gpu_enable_i2c_bus(i2cd);
316 i2c_set_adapdata(&i2cd->adapter, i2cd);
317 i2cd->adapter.owner = THIS_MODULE;
318 strlcpy(i2cd->adapter.name, "NVIDIA GPU I2C adapter",
319 sizeof(i2cd->adapter.name));
320 i2cd->adapter.algo = &gpu_i2c_algorithm;
321 i2cd->adapter.quirks = &gpu_i2c_quirks;
322 i2cd->adapter.dev.parent = &pdev->dev;
323 status = i2c_add_adapter(&i2cd->adapter);
327 status = gpu_populate_client(i2cd, pdev->irq);
341 i2c_del_adapter(&i2cd->adapter);
349 struct gpu_i2c_dev *i2cd = dev_get_drvdata(&pdev->dev);
351 pm_runtime_get_noresume(i2cd->dev);
352 i2c_del_adapter(&i2cd->adapter);
368 struct gpu_i2c_dev *i2cd = dev_get_drvdata(dev);
370 gpu_enable_i2c_bus(i2cd);
377 pm_request_resume(&i2cd->ccgx_client->dev);