113f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch# Copyright (c) 2015 The Chromium OS Authors. All rights reserved. 213f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch# Use of this source code is governed by a BSD-style license that can be 313f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch# found in the LICENSE file. 413f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch 513f929ddf163cc7e475ed34e130e875da11c99c4Todd Brochimport logging 613f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch 713f929ddf163cc7e475ed34e130e875da11c99c4Todd Brochfrom autotest_lib.client.bin import test 813f929ddf163cc7e475ed34e130e875da11c99c4Todd Brochfrom autotest_lib.client.common_lib import error 913f929ddf163cc7e475ed34e130e875da11c99c4Todd Brochfrom autotest_lib.client.cros import ec as cros_ec 1013f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch 1113f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch 1213f929ddf163cc7e475ed34e130e875da11c99c4Todd Brochclass usbpd_DisplayPortSink(test.test): 1313f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch """Integration test for USB-PD DisplayPort sink.""" 1413f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch 1513f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch version = 1 1613f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch DP_SVID = '0xff01' 1713f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch 1813f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch def _is_displayport(self, port): 1913f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch return port.is_amode_supported(self.DP_SVID) 2013f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch 2113f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch def _set_displayport(self, port, opos, enter): 2213f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch return port.set_amode(self.DP_SVID, opos, enter) 2313f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch 2413f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch def run_once(self, enter_reps=1): 2513f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch usbpd = cros_ec.EC_USBPD() 2613f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch logging.info("device has %d USB-PD ports", len(usbpd.ports)) 2713f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch 2813f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch for i,port in enumerate(usbpd.ports): 2913f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch if not port.is_dfp(): 3013f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch continue 3113f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch 3213f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch logging.info("Port %d is dfp", i) 3313f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch 3413f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch if not self._is_displayport(port): 3513f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch continue 3613f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch 3713f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch logging.info("Port %d supports dp", i) 3813f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch 3913f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch for _ in xrange(enter_reps): 4013f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch if not self._set_displayport(port, 1, False): 4113f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch raise error.TestError("Failed to exit DP mode") 4213f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch 4313f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch if not self._set_displayport(port, 1, True): 4413f929ddf163cc7e475ed34e130e875da11c99c4Todd Broch raise error.TestError("Failed to enter DP mode") 45