• Andrey Smirnov's avatar
    rtc: rtctest: Change alarm IRQ support detection · cd26fca2
    Andrey Smirnov authored
    For old style drivers, call a call to ioctl(..., RTC_ALM_SET, ...):
    
        - char/ds1302.c will always return -EINVAL
        - char/genrtc.c: will always return -EINVAL
        - char/rtc.c will succeed regardless if IRQs are supported or not
        - char/efirtc.c will always return -EINVAL
        - input/misc/hp_sdc_rtc.c ... that ioctl code is a good lesson about
          ifdefing code out and punting implementation ... and it will
          always return -EINVAL
    
    For new style rtc drivers, a call to ioctl(..., RTC_ALM_SET, ...) never
    results in a call to __rtc_set_alarm, since struct rtc_wkalarm passed to
    rtc_set_alarm has 'enabled' field set to 0. This means that
    rtc->ops->set_alarm driver hook is never called in that ioctl. Since no
    driver code interaction happens as a part of that call, using its
    results to ascertain properties of the driver is not going to work. To
    remedy this - use the result of RTC_AIE_ON to make the judgement.
    
    This patch also changes ENOTTY to EINVAL as an error code value that
    would tell us that IRQs are not supported. There are three reason for
    this:
    
     - As mentioned above old style driver never returns ENOTTY for this
       ioctl
    
     - In it's code __rtc_set_alarm() returns -EINVAL if rtc->ops->set_alarm
       method is not provided by the driver, so one reason for change is to
       be consistent with that code path.
    
     - A call to ioctl(..., RTC_UIE_ON, ...) will result in a call to
       rtc_update_irq_enable() and then __rtc_set_alarm(), which, if IRQs
       are not supported by the driver, will result in a non-zero error
       code. Returning ENOTTY in that case would:
    
       	 a) Not be consistent with other codepaths of
       	 rtc_update_irq_enable, for example the check of
       	 rtc->uie_unsupported
    
    	 b) Would break update IRQ emulation code since that codpath
    	 expects EINVAL
    
    	 c) Would break test's logic for feature support detection in
    	 the case of RTC_UIE_ON ioctl
    Signed-off-by: default avatarAndrey Smirnov <andrew.smirnov@gmail.com>
    Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@free-electrons.com>
    cd26fca2
rtctest.c 6.12 KB