Lines Matching full:fpga

3  * UP Board FPGA driver.
5 * FPGA provides more GPIO driving power, LEDS and pin mux function.
20 #include <linux/mfd/upboard-fpga.h>
45 struct upboard_fpga *fpga = context; in upboard_fpga_read() local
49 gpiod_set_value(fpga->clear_gpio, 0); in upboard_fpga_read()
50 gpiod_set_value(fpga->clear_gpio, 1); in upboard_fpga_read()
56 gpiod_set_value(fpga->strobe_gpio, 0); in upboard_fpga_read()
57 gpiod_set_value(fpga->datain_gpio, !!(reg & BIT(i))); in upboard_fpga_read()
58 gpiod_set_value(fpga->strobe_gpio, 1); in upboard_fpga_read()
61 gpiod_set_value(fpga->strobe_gpio, 0); in upboard_fpga_read()
66 gpiod_set_value(fpga->strobe_gpio, 1); in upboard_fpga_read()
67 gpiod_set_value(fpga->strobe_gpio, 0); in upboard_fpga_read()
68 *val |= gpiod_get_value(fpga->dataout_gpio) << i; in upboard_fpga_read()
71 gpiod_set_value(fpga->strobe_gpio, 1); in upboard_fpga_read()
78 struct upboard_fpga *fpga = context; in upboard_fpga_write() local
82 gpiod_set_value(fpga->clear_gpio, 0); in upboard_fpga_write()
83 gpiod_set_value(fpga->clear_gpio, 1); in upboard_fpga_write()
87 gpiod_set_value(fpga->strobe_gpio, 0); in upboard_fpga_write()
88 gpiod_set_value(fpga->datain_gpio, !!(reg & BIT(i))); in upboard_fpga_write()
89 gpiod_set_value(fpga->strobe_gpio, 1); in upboard_fpga_write()
92 gpiod_set_value(fpga->strobe_gpio, 0); in upboard_fpga_write()
96 gpiod_set_value(fpga->datain_gpio, !!(val & BIT(i))); in upboard_fpga_write()
97 gpiod_set_value(fpga->strobe_gpio, 1); in upboard_fpga_write()
98 gpiod_set_value(fpga->strobe_gpio, 0); in upboard_fpga_write()
101 gpiod_set_value(fpga->strobe_gpio, 1); in upboard_fpga_write()
191 static int upboard_fpga_gpio_init(struct upboard_fpga *fpga) in upboard_fpga_gpio_init() argument
193 fpga->enable_gpio = devm_gpiod_get(fpga->dev, "enable", GPIOD_ASIS); in upboard_fpga_gpio_init()
194 if (IS_ERR(fpga->enable_gpio)) in upboard_fpga_gpio_init()
195 return PTR_ERR(fpga->enable_gpio); in upboard_fpga_gpio_init()
197 fpga->clear_gpio = devm_gpiod_get(fpga->dev, "clear", GPIOD_OUT_LOW); in upboard_fpga_gpio_init()
198 if (IS_ERR(fpga->clear_gpio)) in upboard_fpga_gpio_init()
199 return PTR_ERR(fpga->clear_gpio); in upboard_fpga_gpio_init()
201 fpga->strobe_gpio = devm_gpiod_get(fpga->dev, "strobe", GPIOD_OUT_LOW); in upboard_fpga_gpio_init()
202 if (IS_ERR(fpga->strobe_gpio)) in upboard_fpga_gpio_init()
203 return PTR_ERR(fpga->strobe_gpio); in upboard_fpga_gpio_init()
205 fpga->datain_gpio = devm_gpiod_get(fpga->dev, "datain", GPIOD_OUT_LOW); in upboard_fpga_gpio_init()
206 if (IS_ERR(fpga->datain_gpio)) in upboard_fpga_gpio_init()
207 return PTR_ERR(fpga->datain_gpio); in upboard_fpga_gpio_init()
209 fpga->dataout_gpio = devm_gpiod_get(fpga->dev, "dataout", GPIOD_IN); in upboard_fpga_gpio_init()
210 if (IS_ERR(fpga->dataout_gpio)) in upboard_fpga_gpio_init()
211 return PTR_ERR(fpga->dataout_gpio); in upboard_fpga_gpio_init()
213 gpiod_set_value(fpga->enable_gpio, 1); in upboard_fpga_gpio_init()
218 static int upboard_fpga_get_firmware_version(struct upboard_fpga *fpga) in upboard_fpga_get_firmware_version() argument
223 if (!fpga) in upboard_fpga_get_firmware_version()
226 ret = regmap_read(fpga->regmap, UPBOARD_REG_PLATFORM_ID, &platform_id); in upboard_fpga_get_firmware_version()
232 return dev_err_probe(fpga->dev, -ENODEV, in upboard_fpga_get_firmware_version()
233 "driver not compatible with custom FPGA FW from manufacturer id %#02x.", in upboard_fpga_get_firmware_version()
236 ret = regmap_read(fpga->regmap, UPBOARD_REG_FIRMWARE_ID, &fpga->firmware_version); in upboard_fpga_get_firmware_version()
240 if (FIELD_GET(UPBOARD_FW_ID_MAJOR_MASK, fpga->firmware_version) != in upboard_fpga_get_firmware_version()
242 return dev_err_probe(fpga->dev, -ENODEV, in upboard_fpga_get_firmware_version()
243 "unsupported FPGA FW v%lu.%lu.%lu build %#02lx", in upboard_fpga_get_firmware_version()
244 FIELD_GET(UPBOARD_FW_ID_MAJOR_MASK, fpga->firmware_version), in upboard_fpga_get_firmware_version()
245 FIELD_GET(UPBOARD_FW_ID_MINOR_MASK, fpga->firmware_version), in upboard_fpga_get_firmware_version()
246 FIELD_GET(UPBOARD_FW_ID_PATCH_MASK, fpga->firmware_version), in upboard_fpga_get_firmware_version()
247 FIELD_GET(UPBOARD_FW_ID_BUILD_MASK, fpga->firmware_version)); in upboard_fpga_get_firmware_version()
254 struct upboard_fpga *fpga = dev_get_drvdata(dev); in upboard_fpga_version_show() local
256 return sysfs_emit(buf, "FPGA FW v%lu.%lu.%lu build %#02lx\n", in upboard_fpga_version_show()
257 FIELD_GET(UPBOARD_FW_ID_MAJOR_MASK, fpga->firmware_version), in upboard_fpga_version_show()
258 FIELD_GET(UPBOARD_FW_ID_MINOR_MASK, fpga->firmware_version), in upboard_fpga_version_show()
259 FIELD_GET(UPBOARD_FW_ID_PATCH_MASK, fpga->firmware_version), in upboard_fpga_version_show()
260 FIELD_GET(UPBOARD_FW_ID_BUILD_MASK, fpga->firmware_version)); in upboard_fpga_version_show()
275 struct upboard_fpga *fpga; in upboard_fpga_probe() local
278 fpga = devm_kzalloc(dev, sizeof(*fpga), GFP_KERNEL); in upboard_fpga_probe()
279 if (!fpga) in upboard_fpga_probe()
282 fpga->fpga_data = device_get_match_data(dev); in upboard_fpga_probe()
284 fpga->dev = dev; in upboard_fpga_probe()
286 platform_set_drvdata(pdev, fpga); in upboard_fpga_probe()
288 fpga->regmap = devm_regmap_init(dev, NULL, fpga, fpga->fpga_data->regmap_config); in upboard_fpga_probe()
289 if (IS_ERR(fpga->regmap)) in upboard_fpga_probe()
290 return PTR_ERR(fpga->regmap); in upboard_fpga_probe()
292 ret = upboard_fpga_gpio_init(fpga); in upboard_fpga_probe()
294 return dev_err_probe(dev, ret, "Failed to initialize FPGA common GPIOs"); in upboard_fpga_probe()
296 ret = upboard_fpga_get_firmware_version(fpga); in upboard_fpga_probe()
313 .name = "upboard-fpga",
324 MODULE_DESCRIPTION("UP Board FPGA driver");