123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415 |
- #include "flash_led_driver.h"
- #include "flash_led_ioctl.h"
- extern uint64_t touch_pin_int_num(struct flash_led_ctrl *pflash_led_dev);
- extern uint64_t touch_pin_high_time_us(void);
- extern uint64_t touch_pin_preiod_time_us(void);
- extern uint64_t touch_pin_falling_int(void);
- extern uint64_t touch_pin_rising_int(void);
- static ssize_t flash_led_falling_int_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- char buffer[100];
- printk("<0>""flash_led falling interrupt num: %d\n", touch_pin_falling_int());
- snprintf(buffer, sizeof(buffer), "falling num :%llu\n", touch_pin_falling_int());
- return strlcpy(buf, buffer, PAGE_SIZE);
- }
- static ssize_t flash_led_rising_int_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- char buffer[100];
- printk("<0>""flash_led rising interrupt num: %d\n", touch_pin_rising_int());
- snprintf(buffer, sizeof(buffer), "rising interupt num :%llu\n", touch_pin_rising_int());
- return strlcpy(buf, buffer, PAGE_SIZE);
- }
- static ssize_t flash_led_info_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- struct platform_device *pdev = to_platform_device(dev);
- struct flash_led_driver_dev *pdriver_dev;
- struct flash_led_ctrl *pflash_led_dev;
- struct flash_led_dev *floodlight;
- struct flash_led_dev *projection;
- char buffer[200];
- char name1[30] = {0};
- char name2[30] = {0};
- pdriver_dev = platform_get_drvdata(pdev);
- pflash_led_dev = (struct flash_led_ctrl*)pdriver_dev->private;
- floodlight = &pflash_led_dev->floodlight;
- projection = &pflash_led_dev->projection;
- if (floodlight->flash_led_func != NULL) {
- strcpy(name1, floodlight->flash_led_func->flash_led_name);
- }
- if (projection->flash_led_func != NULL) {
- strcpy(name2, projection->flash_led_func->flash_led_name);
- }
- snprintf(buffer, sizeof(buffer), "f_led_%s i2c is :%d, p_led_%s i2c is %d\n",
- name1,
- floodlight->i2c_bus,
- name2,
- projection->i2c_bus);
- return strlcpy(buf, buffer, PAGE_SIZE);
- }
- static ssize_t flash_led_int_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- struct platform_device *pdev = to_platform_device(dev);
- struct flash_led_driver_dev *pdriver_dev;
- struct flash_led_ctrl *pflash_led_dev;
- pdriver_dev = platform_get_drvdata(pdev);
- pflash_led_dev = (struct flash_led_ctrl*)pdriver_dev->private;
- char buffer[100];
- printk("<0>""flash_led interrupt num: %d\n", touch_pin_int_num(pflash_led_dev));
- snprintf(buffer, sizeof(buffer), "interupt num :%llu\n", touch_pin_int_num(pflash_led_dev));
- return strlcpy(buf, buffer, PAGE_SIZE);
- }
- static ssize_t flash_led_pin_high_time_us_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- char buffer[100];
- snprintf(buffer, sizeof(buffer), "h time us is :%llu\n", touch_pin_high_time_us());
- return strlcpy(buf, buffer, PAGE_SIZE);
- }
- static ssize_t flash_led_pin_period_us_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- char buffer[100];
- snprintf(buffer, sizeof(buffer), "preiod us is :%llu\n", touch_pin_preiod_time_us());
- return strlcpy(buf, buffer, PAGE_SIZE);
- }
- int32_t flash_led_i2c_write(struct flash_led_dev *dev, uint32_t address, uint32_t data);
- int32_t flash_led_i2c_read(struct flash_led_dev *dev, uint32_t address, uint32_t *pdata);
- static ssize_t floodlight_led_reg_read_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf,
- size_t count)
- {
- int ret = 0;
- struct platform_device *pdev = to_platform_device(dev);
- struct flash_led_driver_dev *pdriver_dev;
- struct flash_led_ctrl *pflash_led_dev;
- struct flash_led_dev *floodlight;
- unsigned long addr;
- uint32_t val;
- pdriver_dev = platform_get_drvdata(pdev);
- pflash_led_dev = (struct flash_led_ctrl*)pdriver_dev->private;
- floodlight = &pflash_led_dev->floodlight;
- if(floodlight->i2c_bus == UNDEFINED_IN_DTS) {
- return count;
- }
- ret = kstrtoul(buf, 16, &addr);
- if (ret < 0) {
- return ret;
- }
- ret = flash_led_i2c_read(floodlight, addr, &val);
- if (ret < 0) {
- return ret;
- }
- printk("read reg[0x%x]: 0x%x\n", addr, val);
- return count;
- }
- static ssize_t floodlight_led_reg_write_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf,
- size_t count)
- {
- int ret = 0;
- struct platform_device *pdev = to_platform_device(dev);
- struct flash_led_driver_dev *pdriver_dev;
- struct flash_led_ctrl *pflash_led_dev;
- struct flash_led_dev *floodlight;
- char buffer[100];
- unsigned long addr;
- uint32_t val;
- pdriver_dev = platform_get_drvdata(pdev);
- pflash_led_dev = (struct flash_led_ctrl*)pdriver_dev->private;
- floodlight = &pflash_led_dev->floodlight;
- if(floodlight->i2c_bus == UNDEFINED_IN_DTS) {
- return count;
- }
- ret = kstrtoul(buf, 16, &addr);
- if (ret < 0) {
- return ret;
- }
- val = addr & 0xff;
- addr = addr >> 8;
- ret = flash_led_i2c_write(floodlight, addr, val);
- if (ret < 0) {
- return ret;
- }
- printk("write reg[0x%x] 0x%x\n", addr, val);
- return count;
- }
- static ssize_t projection_led_reg_read_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf,
- size_t count)
- {
- int ret = 0;
- struct platform_device *pdev = to_platform_device(dev);
- struct flash_led_driver_dev *pdriver_dev;
- struct flash_led_ctrl *pflash_led_dev;
- struct flash_led_dev *projection;
- unsigned long addr;
- uint32_t val;
- pdriver_dev = platform_get_drvdata(pdev);
- pflash_led_dev = (struct flash_led_ctrl*)pdriver_dev->private;
- projection = &pflash_led_dev->projection;
- if(projection->i2c_bus == UNDEFINED_IN_DTS) {
- return count;
- }
- ret = kstrtoul(buf, 16, &addr);
- if (ret < 0) {
- return ret;
- }
- ret = flash_led_i2c_read(projection, addr, &val);
- if (ret < 0) {
- return ret;
- }
- printk("read reg[0x%x]: 0x%x\n", addr, val);
- return count;
- }
- static ssize_t projection_led_reg_write_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf,
- size_t count)
- {
- int ret = 0;
- struct platform_device *pdev = to_platform_device(dev);
- struct flash_led_driver_dev *pdriver_dev;
- struct flash_led_ctrl *pflash_led_dev;
- struct flash_led_dev *projection;
- char buffer[100];
- unsigned long addr;
- uint32_t val;
- pdriver_dev = platform_get_drvdata(pdev);
- pflash_led_dev = (struct flash_led_ctrl*)pdriver_dev->private;
- projection = &pflash_led_dev->projection;
- if(projection->i2c_bus == UNDEFINED_IN_DTS) {
- return count;
- }
- ret = kstrtoul(buf, 16, &addr);
- if (ret < 0) {
- return ret;
- }
- val = addr & 0xff;
- addr = addr >> 8;
- ret = flash_led_i2c_write(projection, addr, val);
- if (ret < 0) {
- return ret;
- }
- printk("write reg[0x%x] 0x%x\n", addr, val);
- return count;
- }
- static ssize_t flash_led_enable_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf,
- size_t count)
- {
- int ret = 0;
- struct platform_device *pdev = to_platform_device(dev);
- struct flash_led_driver_dev *pdriver_dev;
- struct flash_led_ctrl *pflash_led_dev;
- char buffer[100];
- unsigned long en;
- pdriver_dev = platform_get_drvdata(pdev);
- pflash_led_dev = (struct flash_led_ctrl *)pdriver_dev->private;
- ret = kstrtoul(buf, 10, &en);
- if (ret < 0) {
- return ret;
- }
- pflash_led_dev->enable = en;
- return count;
- }
- static ssize_t flash_led_enable_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- int ret = 0;
- struct platform_device *pdev = to_platform_device(dev);
- struct flash_led_driver_dev *pdriver_dev;
- struct flash_led_ctrl *pflash_led_dev;
- char buffer[100];
- unsigned long en;
- pdriver_dev = platform_get_drvdata(pdev);
- pflash_led_dev = (struct flash_led_ctrl *)pdriver_dev->private;
- snprintf(buffer, sizeof(buffer), "flash_led enable mask is 0x%x\n", pflash_led_dev->enable);
- return strlcpy(buf, buffer, PAGE_SIZE);
- }
- uint64_t get_us_time(void);
- static ssize_t projection_enable_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf,
- size_t count)
- {
- int ret = 0;
- struct platform_device *pdev = to_platform_device(dev);
- struct flash_led_driver_dev *pdriver_dev;
- struct flash_led_ctrl *pflash_led_dev;
- struct flash_led_dev *projection;
- char buffer[100];
- unsigned long ch;
- pdriver_dev = platform_get_drvdata(pdev);
- pflash_led_dev = (struct flash_led_ctrl*)pdriver_dev->private;
- projection = &pflash_led_dev->projection;
- ret = kstrtoul(buf, 10, &ch);
- if (ret < 0) {
- return ret;
- }
- uint64_t us1 = get_us_time();
- if (projection->flash_led_func != NULL) {
- projection->flash_led_func->enable_channel(projection, ch);
- }
- uint64_t us2 = get_us_time();
- printk("used time %llu us\n", us2 - us1);
- return count;
- }
- static ssize_t floodlight_enable_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf,
- size_t count)
- {
- int ret = 0;
- struct platform_device *pdev = to_platform_device(dev);
- struct flash_led_driver_dev *pdriver_dev;
- struct flash_led_ctrl *pflash_led_dev;
- struct flash_led_dev *floodlight;
- unsigned long ch;
- pdriver_dev = platform_get_drvdata(pdev);
- pflash_led_dev = (struct flash_led_ctrl*)pdriver_dev->private;
- floodlight = &pflash_led_dev->floodlight;
- ret = kstrtoul(buf, 10, &ch);
- if (ret < 0) {
- return ret;
- }
- uint64_t us1 = get_us_time();
- if (floodlight->flash_led_func != NULL) {
- floodlight->flash_led_func->enable_channel(floodlight, ch);
- }
- uint64_t us2 = get_us_time();
- printk("used time %llu us\n", us2 - us1);
- return count;
- }
- static DEVICE_ATTR_RO(flash_led_info);
- static DEVICE_ATTR_RO(flash_led_int);
- static DEVICE_ATTR_RO(flash_led_pin_high_time_us);
- static DEVICE_ATTR_RO(flash_led_pin_period_us);
- static DEVICE_ATTR_RO(flash_led_falling_int);
- static DEVICE_ATTR_RO(flash_led_rising_int);
- static DEVICE_ATTR_WO(projection_led_reg_write);
- static DEVICE_ATTR_WO(projection_led_reg_read);
- static DEVICE_ATTR_WO(floodlight_led_reg_write);
- static DEVICE_ATTR_WO(floodlight_led_reg_read);
- static DEVICE_ATTR_WO(projection_enable);
- static DEVICE_ATTR_WO(floodlight_enable);
- static DEVICE_ATTR_RW(flash_led_enable);
- int flash_led_create_capabilities_sysfs(struct platform_device *pdev)
- {
- device_create_file(&pdev->dev, &dev_attr_flash_led_info);
- device_create_file(&pdev->dev, &dev_attr_flash_led_int);
- device_create_file(&pdev->dev, &dev_attr_flash_led_pin_high_time_us);
- device_create_file(&pdev->dev, &dev_attr_flash_led_pin_period_us);
- device_create_file(&pdev->dev, &dev_attr_flash_led_falling_int);
- device_create_file(&pdev->dev, &dev_attr_flash_led_rising_int);
- device_create_file(&pdev->dev, &dev_attr_projection_led_reg_write);
- device_create_file(&pdev->dev, &dev_attr_projection_led_reg_read);
- device_create_file(&pdev->dev, &dev_attr_floodlight_led_reg_write);
- device_create_file(&pdev->dev, &dev_attr_floodlight_led_reg_read);
- device_create_file(&pdev->dev, &dev_attr_projection_enable);
- device_create_file(&pdev->dev, &dev_attr_floodlight_enable);
- device_create_file(&pdev->dev, &dev_attr_flash_led_enable);
- return 0;
- }
- int flash_led_remove_capabilities_sysfs(struct platform_device *pdev)
- {
- device_remove_file(&pdev->dev, &dev_attr_flash_led_info);
- device_remove_file(&pdev->dev, &dev_attr_flash_led_int);
- device_remove_file(&pdev->dev, &dev_attr_flash_led_pin_high_time_us);
- device_remove_file(&pdev->dev, &dev_attr_flash_led_pin_period_us);
- device_remove_file(&pdev->dev, &dev_attr_flash_led_falling_int);
- device_remove_file(&pdev->dev, &dev_attr_flash_led_rising_int);
- device_remove_file(&pdev->dev, &dev_attr_projection_led_reg_write);
- device_remove_file(&pdev->dev, &dev_attr_projection_led_reg_read);
- device_remove_file(&pdev->dev, &dev_attr_floodlight_led_reg_write);
- device_remove_file(&pdev->dev, &dev_attr_floodlight_led_reg_read);
- device_remove_file(&pdev->dev, &dev_attr_projection_enable);
- device_remove_file(&pdev->dev, &dev_attr_floodlight_enable);
- device_remove_file(&pdev->dev, &dev_attr_flash_led_enable);
- return 0;
- }
|