Lines Matching refs:i2cd

57 static void gpu_enable_i2c_bus(struct gpu_i2c_dev *i2cd)  in gpu_enable_i2c_bus()  argument
62 val = readl(i2cd->regs + I2C_MST_HYBRID_PADCTL); in gpu_enable_i2c_bus()
66 writel(val, i2cd->regs + I2C_MST_HYBRID_PADCTL); in gpu_enable_i2c_bus()
73 writel(val, i2cd->regs + I2C_MST_I2C0_TIMING); in gpu_enable_i2c_bus()
76 static int gpu_i2c_check_status(struct gpu_i2c_dev *i2cd) in gpu_i2c_check_status() argument
82 val = readl(i2cd->regs + I2C_MST_CNTL); in gpu_i2c_check_status()
92 dev_err(i2cd->dev, "i2c timeout error %x\n", val); in gpu_i2c_check_status()
96 val = readl(i2cd->regs + I2C_MST_CNTL); in gpu_i2c_check_status()
109 static int gpu_i2c_read(struct gpu_i2c_dev *i2cd, u8 *data, u16 len) in gpu_i2c_read() argument
117 writel(val, i2cd->regs + I2C_MST_CNTL); in gpu_i2c_read()
119 status = gpu_i2c_check_status(i2cd); in gpu_i2c_read()
123 val = readl(i2cd->regs + I2C_MST_DATA); in gpu_i2c_read()
144 static int gpu_i2c_start(struct gpu_i2c_dev *i2cd) in gpu_i2c_start() argument
146 writel(I2C_MST_CNTL_GEN_START, i2cd->regs + I2C_MST_CNTL); in gpu_i2c_start()
147 return gpu_i2c_check_status(i2cd); in gpu_i2c_start()
150 static int gpu_i2c_stop(struct gpu_i2c_dev *i2cd) in gpu_i2c_stop() argument
152 writel(I2C_MST_CNTL_GEN_STOP, i2cd->regs + I2C_MST_CNTL); in gpu_i2c_stop()
153 return gpu_i2c_check_status(i2cd); in gpu_i2c_stop()
156 static int gpu_i2c_write(struct gpu_i2c_dev *i2cd, u8 data) in gpu_i2c_write() argument
160 writel(data, i2cd->regs + I2C_MST_DATA); in gpu_i2c_write()
163 writel(val, i2cd->regs + I2C_MST_CNTL); in gpu_i2c_write()
165 return gpu_i2c_check_status(i2cd); in gpu_i2c_write()
171 struct gpu_i2c_dev *i2cd = i2c_get_adapdata(adap); in gpu_i2c_master_xfer() local
180 pm_runtime_get_sync(i2cd->dev); in gpu_i2c_master_xfer()
184 writel(msgs[i].addr, i2cd->regs + I2C_MST_ADDR); in gpu_i2c_master_xfer()
186 status = gpu_i2c_read(i2cd, msgs[i].buf, msgs[i].len); in gpu_i2c_master_xfer()
192 status = gpu_i2c_start(i2cd); in gpu_i2c_master_xfer()
199 status = gpu_i2c_write(i2cd, addr); in gpu_i2c_master_xfer()
204 status = gpu_i2c_write(i2cd, msgs[i].buf[j]); in gpu_i2c_master_xfer()
211 status = gpu_i2c_stop(i2cd); in gpu_i2c_master_xfer()
218 status2 = gpu_i2c_stop(i2cd); in gpu_i2c_master_xfer()
220 dev_err(i2cd->dev, "i2c stop failed %d\n", status2); in gpu_i2c_master_xfer()
222 pm_runtime_mark_last_busy(i2cd->dev); in gpu_i2c_master_xfer()
223 pm_runtime_put_autosuspend(i2cd->dev); in gpu_i2c_master_xfer()
270 static int gpu_populate_client(struct gpu_i2c_dev *i2cd, int irq) in gpu_populate_client() argument
272 i2cd->gpu_ccgx_ucsi = devm_kzalloc(i2cd->dev, in gpu_populate_client()
273 sizeof(*i2cd->gpu_ccgx_ucsi), in gpu_populate_client()
275 if (!i2cd->gpu_ccgx_ucsi) in gpu_populate_client()
278 strlcpy(i2cd->gpu_ccgx_ucsi->type, "ccgx-ucsi", in gpu_populate_client()
279 sizeof(i2cd->gpu_ccgx_ucsi->type)); in gpu_populate_client()
280 i2cd->gpu_ccgx_ucsi->addr = 0x8; in gpu_populate_client()
281 i2cd->gpu_ccgx_ucsi->irq = irq; in gpu_populate_client()
282 i2cd->gpu_ccgx_ucsi->properties = ccgx_props; in gpu_populate_client()
283 i2cd->ccgx_client = i2c_new_device(&i2cd->adapter, i2cd->gpu_ccgx_ucsi); in gpu_populate_client()
284 if (!i2cd->ccgx_client) in gpu_populate_client()
292 struct gpu_i2c_dev *i2cd; in gpu_i2c_probe() local
295 i2cd = devm_kzalloc(&pdev->dev, sizeof(*i2cd), GFP_KERNEL); in gpu_i2c_probe()
296 if (!i2cd) in gpu_i2c_probe()
299 i2cd->dev = &pdev->dev; in gpu_i2c_probe()
300 dev_set_drvdata(&pdev->dev, i2cd); in gpu_i2c_probe()
310 i2cd->regs = pcim_iomap(pdev, 0, 0); in gpu_i2c_probe()
311 if (!i2cd->regs) { in gpu_i2c_probe()
322 gpu_enable_i2c_bus(i2cd); in gpu_i2c_probe()
324 i2c_set_adapdata(&i2cd->adapter, i2cd); in gpu_i2c_probe()
325 i2cd->adapter.owner = THIS_MODULE; in gpu_i2c_probe()
326 strlcpy(i2cd->adapter.name, "NVIDIA GPU I2C adapter", in gpu_i2c_probe()
327 sizeof(i2cd->adapter.name)); in gpu_i2c_probe()
328 i2cd->adapter.algo = &gpu_i2c_algorithm; in gpu_i2c_probe()
329 i2cd->adapter.quirks = &gpu_i2c_quirks; in gpu_i2c_probe()
330 i2cd->adapter.dev.parent = &pdev->dev; in gpu_i2c_probe()
331 status = i2c_add_adapter(&i2cd->adapter); in gpu_i2c_probe()
335 status = gpu_populate_client(i2cd, pdev->irq); in gpu_i2c_probe()
349 i2c_del_adapter(&i2cd->adapter); in gpu_i2c_probe()
357 struct gpu_i2c_dev *i2cd = dev_get_drvdata(&pdev->dev); in gpu_i2c_remove() local
359 pm_runtime_get_noresume(i2cd->dev); in gpu_i2c_remove()
360 i2c_del_adapter(&i2cd->adapter); in gpu_i2c_remove()
376 struct gpu_i2c_dev *i2cd = dev_get_drvdata(dev); in gpu_i2c_resume() local
378 gpu_enable_i2c_bus(i2cd); in gpu_i2c_resume()
385 pm_request_resume(&i2cd->ccgx_client->dev); in gpu_i2c_resume()