Lines Matching refs:cpld

27 #define DRV_NAME	"spi-rb4xx-cpld"
52 static int rb4xx_cpld_write_cmd(struct rb4xx_cpld *cpld, unsigned char cmd)
68 err = spi_sync(cpld->spi, &m);
72 static int rb4xx_cpld_write_cfg(struct rb4xx_cpld *cpld, unsigned char config)
89 err = spi_sync(cpld->spi, &m);
93 static int __rb4xx_cpld_change_cfg(struct rb4xx_cpld *cpld, unsigned mask,
99 config = cpld->config & ~mask;
102 if ((cpld->config ^ config) & 0xff) {
103 err = rb4xx_cpld_write_cfg(cpld, config);
108 if ((cpld->config ^ config) & CPLD_CFG_nLED5) {
109 err = rb4xx_cpld_write_cmd(cpld, (value) ? CPLD_CMD_LED5_ON :
115 cpld->config = config;
288 struct rb4xx_cpld *cpld = gpio_to_cpld(chip);
291 mutex_lock(&cpld->lock);
292 ret = (cpld->config >> offset) & 1;
293 mutex_unlock(&cpld->lock);
301 struct rb4xx_cpld *cpld = gpio_to_cpld(chip);
303 mutex_lock(&cpld->lock);
304 __rb4xx_cpld_change_cfg(cpld, (1 << offset), !!value << offset);
305 mutex_unlock(&cpld->lock);
318 struct rb4xx_cpld *cpld = gpio_to_cpld(chip);
321 mutex_lock(&cpld->lock);
322 ret = __rb4xx_cpld_change_cfg(cpld, (1 << offset), !!value << offset);
323 mutex_unlock(&cpld->lock);
328 static int rb4xx_cpld_gpio_init(struct rb4xx_cpld *cpld, unsigned int base)
333 cpld->config = CPLD_CFG_nLED1 | CPLD_CFG_nLED2 | CPLD_CFG_nLED3 |
335 rb4xx_cpld_write_cfg(cpld, cpld->config);
338 cpld->chip.label = DRV_NAME;
340 cpld->chip.get = rb4xx_cpld_gpio_get;
341 cpld->chip.set = rb4xx_cpld_gpio_set;
342 cpld->chip.direction_input = rb4xx_cpld_gpio_direction_input;
343 cpld->chip.direction_output = rb4xx_cpld_gpio_direction_output;
345 cpld->chip.base = base;
346 cpld->chip.ngpio = CPLD_NUM_GPIOS;
347 cpld->chip.can_sleep = 1;
348 cpld->chip.dev = &cpld->spi->dev;
349 cpld->chip.owner = THIS_MODULE;
351 err = gpiochip_add(&cpld->chip);
353 dev_err(&cpld->spi->dev, "adding GPIO chip failed, err=%d\n",
361 struct rb4xx_cpld *cpld;
371 cpld = kzalloc(sizeof(*cpld), GFP_KERNEL);
372 if (!cpld) {
377 mutex_init(&cpld->lock);
378 cpld->spi = spi_dev_get(spi);
379 dev_set_drvdata(&spi->dev, cpld);
389 err = rb4xx_cpld_gpio_init(cpld, pdata->gpio_base);
393 rb4xx_cpld = cpld;
399 kfree(cpld);
406 struct rb4xx_cpld *cpld;
409 cpld = dev_get_drvdata(&spi->dev);
411 kfree(cpld);