In definition of struct pwm_exp, extended length of key by 1 to ensure room for a terminating byte. Currently, the code doesn't check this, expecting strncpy in pwm_start to trim and NUL-terminate the string.
In lookup_exported_pwm, return "not-found" condition as NULL, not 0, per general pointer usage recommendations.
In pwm_start, added code to ensure NUL-termination of the key.
In pwm_disable, there's a path that doesn't set prev_pwm and can leave it NULL. It being NULL seems to indicate a "first-time" flag, for when the first item in the list is matched. If the search should be terminated after finding device "key", should break be used? Reasonably, a device named "key" should only be found once in the tree, but as coded, it seems that this search loop might find it more than once.
In pwm_set_polarity, the original length of the buffer as 5 will cover positive 16-bit integers, but not room for a trailing NUL byte. If accidently negative, a size of 7 will include room for the sign without breaking.