After beginning his career at hometown club IFK Eskilstuna, Larsson was signed by Arsenal. He made three league appearances for the Gunners, before joining Birmingham City, initially on loan for the 2006–07 season, before a permanent transfer in the winter of 2007. Larsson spent five years at Birmingham, experiencing promotion to, and relegation from, the Premier League on two occasions. He joined Sunderland on 1 July 2011 upon the expiry of his contract, after Birmingham suffered relegation. He left Sunderland in 2017 to sign for Hull City in the EFL Championship where he spent one season. He returned to his native Sweden in 2018 to sign for AIK, and helped them win the 2018 Allsvenskan title.