Merge tag 'rtc-4.16' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 2 Feb 2018 22:19:19 +0000 (14:19 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 2 Feb 2018 22:19:19 +0000 (14:19 -0800)
Pull RTC updates from Alexandre Belloni:
 "Not much this cycle. I've pushed the at32ap700x removal late but it is
  unlikely to cause any issues.

  Summary:

  Subsystem:
   - Move ABI documentation to Documentation/ABI

  New driver:
   - NXP i.MX53 SRTC
   - Chrome OS EC RTC

  Drivers:
   - Remove at32ap700x
   - Many fixes in various error paths"

* tag 'rtc-4.16' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux:
  rtc: remove rtc-at32ap700x
  Documentation: rtc: move iotcl interface documentation to ABI
  Documentation: rtc: add sysfs file permissions
  Documentation: rtc: move sysfs documentation to ABI
  rtc: mxc_v2: remove __exit annotation
  rtc: mxc_v2: Remove unnecessary platform_get_resource() error check
  rtc: add mxc driver for i.MX53 SRTC
  dt-bindings: rtc: add bindings for i.MX53 SRTC
  rtc: r7301: Fix a possible sleep-in-atomic bug in rtc7301_set_time
  rtc: r7301: Fix a possible sleep-in-atomic bug in rtc7301_read_time
  rtc: omap: fix unbalanced clk_prepare_enable/clk_disable_unprepare
  rtc: ac100: Fix multiple race conditions
  rtc: sun6i: ensure rtc is kfree'd on error
  rtc: cros-ec: add cros-ec-rtc driver.
  mfd: cros_ec: Introduce RTC commands and events definitions.
  rtc: stm32: Fix copyright
  rtc: Remove unused RTC_DEVICE_NAME_SIZE
  rtc: r9701: Remove r9701_remove function
  rtc: brcmstb-waketimer: fix error handling in brcmstb_waketmr_probe()

1  2 
drivers/rtc/rtc-ac100.c
include/linux/mfd/cros_ec_commands.h

diff --combined drivers/rtc/rtc-ac100.c
@@@ -137,15 -137,13 +137,15 @@@ static unsigned long ac100_clkout_recal
                div = (reg >> AC100_CLKOUT_PRE_DIV_SHIFT) &
                        ((1 << AC100_CLKOUT_PRE_DIV_WIDTH) - 1);
                prate = divider_recalc_rate(hw, prate, div,
 -                                          ac100_clkout_prediv, 0);
 +                                          ac100_clkout_prediv, 0,
 +                                          AC100_CLKOUT_PRE_DIV_WIDTH);
        }
  
        div = (reg >> AC100_CLKOUT_DIV_SHIFT) &
                (BIT(AC100_CLKOUT_DIV_WIDTH) - 1);
        return divider_recalc_rate(hw, prate, div, NULL,
 -                                 CLK_DIVIDER_POWER_OF_TWO);
 +                                 CLK_DIVIDER_POWER_OF_TWO,
 +                                 AC100_CLKOUT_DIV_WIDTH);
  }
  
  static long ac100_clkout_round_rate(struct clk_hw *hw, unsigned long rate,
@@@ -569,6 -567,12 +569,12 @@@ static int ac100_rtc_probe(struct platf
                return chip->irq;
        }
  
+       chip->rtc = devm_rtc_allocate_device(&pdev->dev);
+       if (IS_ERR(chip->rtc))
+               return PTR_ERR(chip->rtc);
+       chip->rtc->ops = &ac100_rtc_ops;
        ret = devm_request_threaded_irq(&pdev->dev, chip->irq, NULL,
                                        ac100_rtc_irq,
                                        IRQF_SHARED | IRQF_ONESHOT,
        /* clear counter alarm pending interrupts */
        regmap_write(chip->regmap, AC100_ALM_INT_STA, AC100_ALM_INT_ENABLE);
  
-       chip->rtc = devm_rtc_device_register(&pdev->dev, "rtc-ac100",
-                                            &ac100_rtc_ops, THIS_MODULE);
-       if (IS_ERR(chip->rtc)) {
-               dev_err(&pdev->dev, "unable to register device\n");
-               return PTR_ERR(chip->rtc);
-       }
        ret = ac100_rtc_register_clks(chip);
        if (ret)
                return ret;
  
+       ret = rtc_register_device(chip->rtc);
+       if (ret) {
+               dev_err(&pdev->dev, "unable to register device\n");
+               return ret;
+       }
        dev_info(&pdev->dev, "RTC enabled\n");
  
        return 0;
@@@ -291,6 -291,9 +291,9 @@@ enum host_event_code 
        /* EC desires to change state of host-controlled USB mux */
        EC_HOST_EVENT_USB_MUX = 28,
  
+       /* EC RTC event occurred */
+       EC_HOST_EVENT_RTC = 26,
        /*
         * The high bit of the event mask is not used as a host event code.  If
         * it reads back as set, then the entire event mask should be
@@@ -799,6 -802,8 +802,8 @@@ enum ec_feature_code 
        EC_FEATURE_USB_MUX = 23,
        /* Motion Sensor code has an internal software FIFO */
        EC_FEATURE_MOTION_SENSE_FIFO = 24,
+       /* EC has RTC feature that can be controlled by host commands */
+       EC_FEATURE_RTC = 27,
  };
  
  #define EC_FEATURE_MASK_0(event_code) (1UL << (event_code % 32))
@@@ -1709,6 -1714,9 +1714,9 @@@ struct ec_response_rtc 
  #define EC_CMD_RTC_SET_VALUE 0x46
  #define EC_CMD_RTC_SET_ALARM 0x47
  
+ /* Pass as param to SET_ALARM to clear the current alarm */
+ #define EC_RTC_ALARM_CLEAR 0
  /*****************************************************************************/
  /* Port80 log access */
  
@@@ -2904,33 -2912,16 +2912,33 @@@ enum usb_pd_control_mux 
        USB_PD_CTRL_MUX_AUTO = 5,
  };
  
 +enum usb_pd_control_swap {
 +      USB_PD_CTRL_SWAP_NONE = 0,
 +      USB_PD_CTRL_SWAP_DATA = 1,
 +      USB_PD_CTRL_SWAP_POWER = 2,
 +      USB_PD_CTRL_SWAP_VCONN = 3,
 +      USB_PD_CTRL_SWAP_COUNT
 +};
 +
  struct ec_params_usb_pd_control {
        uint8_t port;
        uint8_t role;
        uint8_t mux;
 +      uint8_t swap;
  } __packed;
  
  #define PD_CTRL_RESP_ENABLED_COMMS      (1 << 0) /* Communication enabled */
  #define PD_CTRL_RESP_ENABLED_CONNECTED  (1 << 1) /* Device connected */
  #define PD_CTRL_RESP_ENABLED_PD_CAPABLE (1 << 2) /* Partner is PD capable */
  
 +#define PD_CTRL_RESP_ROLE_POWER         BIT(0) /* 0=SNK/1=SRC */
 +#define PD_CTRL_RESP_ROLE_DATA          BIT(1) /* 0=UFP/1=DFP */
 +#define PD_CTRL_RESP_ROLE_VCONN         BIT(2) /* Vconn status */
 +#define PD_CTRL_RESP_ROLE_DR_POWER      BIT(3) /* Partner is dualrole power */
 +#define PD_CTRL_RESP_ROLE_DR_DATA       BIT(4) /* Partner is dualrole data */
 +#define PD_CTRL_RESP_ROLE_USB_COMM      BIT(5) /* Partner USB comm capable */
 +#define PD_CTRL_RESP_ROLE_EXT_POWERED   BIT(6) /* Partner externally powerd */
 +
  struct ec_response_usb_pd_control_v1 {
        uint8_t enabled;
        uint8_t role;