• Home
  • Raw
  • Download

Lines Matching refs:pld

36 static void kempld_get_hardware_mutex(struct kempld_device_data *pld)  in kempld_get_hardware_mutex()  argument
39 while (ioread8(pld->io_index) & KEMPLD_MUTEX_KEY) in kempld_get_hardware_mutex()
43 static void kempld_release_hardware_mutex(struct kempld_device_data *pld) in kempld_release_hardware_mutex() argument
46 iowrite8(KEMPLD_MUTEX_KEY, pld->io_index); in kempld_release_hardware_mutex()
49 static int kempld_get_info_generic(struct kempld_device_data *pld) in kempld_get_info_generic() argument
54 kempld_get_mutex(pld); in kempld_get_info_generic()
56 version = kempld_read16(pld, KEMPLD_VERSION); in kempld_get_info_generic()
57 spec = kempld_read8(pld, KEMPLD_SPEC); in kempld_get_info_generic()
58 pld->info.buildnr = kempld_read16(pld, KEMPLD_BUILDNR); in kempld_get_info_generic()
60 pld->info.minor = KEMPLD_VERSION_GET_MINOR(version); in kempld_get_info_generic()
61 pld->info.major = KEMPLD_VERSION_GET_MAJOR(version); in kempld_get_info_generic()
62 pld->info.number = KEMPLD_VERSION_GET_NUMBER(version); in kempld_get_info_generic()
63 pld->info.type = KEMPLD_VERSION_GET_TYPE(version); in kempld_get_info_generic()
66 pld->info.spec_minor = 0; in kempld_get_info_generic()
67 pld->info.spec_major = 1; in kempld_get_info_generic()
69 pld->info.spec_minor = KEMPLD_SPEC_GET_MINOR(spec); in kempld_get_info_generic()
70 pld->info.spec_major = KEMPLD_SPEC_GET_MAJOR(spec); in kempld_get_info_generic()
73 if (pld->info.spec_major > 0) in kempld_get_info_generic()
74 pld->feature_mask = kempld_read16(pld, KEMPLD_FEATURE); in kempld_get_info_generic()
76 pld->feature_mask = 0; in kempld_get_info_generic()
78 kempld_release_mutex(pld); in kempld_get_info_generic()
107 static int kempld_register_cells_generic(struct kempld_device_data *pld) in kempld_register_cells_generic() argument
112 if (pld->feature_mask & KEMPLD_FEATURE_BIT_I2C) in kempld_register_cells_generic()
115 if (pld->feature_mask & KEMPLD_FEATURE_BIT_WATCHDOG) in kempld_register_cells_generic()
118 if (pld->feature_mask & KEMPLD_FEATURE_BIT_GPIO) in kempld_register_cells_generic()
121 if (pld->feature_mask & KEMPLD_FEATURE_MASK_UART) in kempld_register_cells_generic()
124 return mfd_add_devices(pld->dev, -1, devs, i, NULL, 0, NULL); in kempld_register_cells_generic()
178 u8 kempld_read8(struct kempld_device_data *pld, u8 index) in kempld_read8() argument
180 iowrite8(index, pld->io_index); in kempld_read8()
181 return ioread8(pld->io_data); in kempld_read8()
193 void kempld_write8(struct kempld_device_data *pld, u8 index, u8 data) in kempld_write8() argument
195 iowrite8(index, pld->io_index); in kempld_write8()
196 iowrite8(data, pld->io_data); in kempld_write8()
207 u16 kempld_read16(struct kempld_device_data *pld, u8 index) in kempld_read16() argument
209 return kempld_read8(pld, index) | kempld_read8(pld, index + 1) << 8; in kempld_read16()
221 void kempld_write16(struct kempld_device_data *pld, u8 index, u16 data) in kempld_write16() argument
223 kempld_write8(pld, index, (u8)data); in kempld_write16()
224 kempld_write8(pld, index + 1, (u8)(data >> 8)); in kempld_write16()
235 u32 kempld_read32(struct kempld_device_data *pld, u8 index) in kempld_read32() argument
237 return kempld_read16(pld, index) | kempld_read16(pld, index + 2) << 16; in kempld_read32()
249 void kempld_write32(struct kempld_device_data *pld, u8 index, u32 data) in kempld_write32() argument
251 kempld_write16(pld, index, (u16)data); in kempld_write32()
252 kempld_write16(pld, index + 2, (u16)(data >> 16)); in kempld_write32()
260 void kempld_get_mutex(struct kempld_device_data *pld) in kempld_get_mutex() argument
262 struct kempld_platform_data *pdata = dev_get_platdata(pld->dev); in kempld_get_mutex()
264 mutex_lock(&pld->lock); in kempld_get_mutex()
265 pdata->get_hardware_mutex(pld); in kempld_get_mutex()
273 void kempld_release_mutex(struct kempld_device_data *pld) in kempld_release_mutex() argument
275 struct kempld_platform_data *pdata = dev_get_platdata(pld->dev); in kempld_release_mutex()
277 pdata->release_hardware_mutex(pld); in kempld_release_mutex()
278 mutex_unlock(&pld->lock); in kempld_release_mutex()
290 static int kempld_get_info(struct kempld_device_data *pld) in kempld_get_info() argument
293 struct kempld_platform_data *pdata = dev_get_platdata(pld->dev); in kempld_get_info()
296 ret = pdata->get_info(pld); in kempld_get_info()
308 if (pld->info.major < 10) in kempld_get_info()
309 major = pld->info.major + '0'; in kempld_get_info()
311 major = (pld->info.major - 10) + 'A'; in kempld_get_info()
312 if (pld->info.minor < 10) in kempld_get_info()
313 minor = pld->info.minor + '0'; in kempld_get_info()
315 minor = (pld->info.minor - 10) + 'A'; in kempld_get_info()
317 ret = scnprintf(pld->info.version, sizeof(pld->info.version), in kempld_get_info()
318 "P%X%c%c.%04X", pld->info.number, major, minor, in kempld_get_info()
319 pld->info.buildnr); in kempld_get_info()
333 static int kempld_register_cells(struct kempld_device_data *pld) in kempld_register_cells() argument
335 struct kempld_platform_data *pdata = dev_get_platdata(pld->dev); in kempld_register_cells()
337 return pdata->register_cells(pld); in kempld_register_cells()
340 static const char *kempld_get_type_string(struct kempld_device_data *pld) in kempld_get_type_string() argument
344 switch (pld->info.type) { in kempld_get_type_string()
365 struct kempld_device_data *pld = dev_get_drvdata(dev); in kempld_version_show() local
367 return scnprintf(buf, PAGE_SIZE, "%s\n", pld->info.version); in kempld_version_show()
373 struct kempld_device_data *pld = dev_get_drvdata(dev); in kempld_specification_show() local
375 return scnprintf(buf, PAGE_SIZE, "%d.%d\n", pld->info.spec_major, in kempld_specification_show()
376 pld->info.spec_minor); in kempld_specification_show()
382 struct kempld_device_data *pld = dev_get_drvdata(dev); in kempld_type_show() local
384 return scnprintf(buf, PAGE_SIZE, "%s\n", kempld_get_type_string(pld)); in kempld_type_show()
403 static int kempld_detect_device(struct kempld_device_data *pld) in kempld_detect_device() argument
408 mutex_lock(&pld->lock); in kempld_detect_device()
411 index_reg = ioread8(pld->io_index); in kempld_detect_device()
412 if (index_reg == 0xff && ioread8(pld->io_data) == 0xff) { in kempld_detect_device()
413 mutex_unlock(&pld->lock); in kempld_detect_device()
419 iowrite8(KEMPLD_MUTEX_KEY, pld->io_index); in kempld_detect_device()
421 iowrite8(KEMPLD_MUTEX_KEY, pld->io_index); in kempld_detect_device()
424 mutex_unlock(&pld->lock); in kempld_detect_device()
426 ret = kempld_get_info(pld); in kempld_detect_device()
430 dev_info(pld->dev, "Found Kontron PLD - %s (%s), spec %d.%d\n", in kempld_detect_device()
431 pld->info.version, kempld_get_type_string(pld), in kempld_detect_device()
432 pld->info.spec_major, pld->info.spec_minor); in kempld_detect_device()
434 ret = sysfs_create_group(&pld->dev->kobj, &pld_attr_group); in kempld_detect_device()
438 ret = kempld_register_cells(pld); in kempld_detect_device()
440 sysfs_remove_group(&pld->dev->kobj, &pld_attr_group); in kempld_detect_device()
449 struct kempld_device_data *pld; in kempld_probe() local
452 pld = devm_kzalloc(dev, sizeof(*pld), GFP_KERNEL); in kempld_probe()
453 if (!pld) in kempld_probe()
460 pld->io_base = devm_ioport_map(dev, ioport->start, in kempld_probe()
462 if (!pld->io_base) in kempld_probe()
465 pld->io_index = pld->io_base; in kempld_probe()
466 pld->io_data = pld->io_base + 1; in kempld_probe()
467 pld->pld_clock = pdata->pld_clock; in kempld_probe()
468 pld->dev = dev; in kempld_probe()
470 mutex_init(&pld->lock); in kempld_probe()
471 platform_set_drvdata(pdev, pld); in kempld_probe()
473 return kempld_detect_device(pld); in kempld_probe()
478 struct kempld_device_data *pld = platform_get_drvdata(pdev); in kempld_remove() local
479 struct kempld_platform_data *pdata = dev_get_platdata(pld->dev); in kempld_remove()
481 sysfs_remove_group(&pld->dev->kobj, &pld_attr_group); in kempld_remove()
484 pdata->release_hardware_mutex(pld); in kempld_remove()