Here they like to challenge interns and see how far they can let them go. For instance, when I was an intern I took a real eagerness to learn things by viewing specs, schematics, other people's code, etc. They started me with small automation/testing tasks and gradually built me out from there with finally me working on production code. When my co-op officially ended, they offered to keep me on as a standard intern in another firmware group (POST). I was further challenged and essentially was working on production code for my entire duration. It started out as small things like fixing menu text, or things that were running out of bounds, but eventually it turned into me working on major projects where even my boss didn't know the answer and simply told me "read the spec."
On the other hand, we have this co-op who has been here three times so far (co-op contract with his school) and is basically terrible. They gave him one bug fix in his first group and it took him his entire duration to fix it. They simply didn't add anything to his plate and that was it. Now he's in our group (BIOS) and his code is horrendous. You can tell the dude doesn't learn anything and clearly does not pick up on the general overall coding style of the group (lowercase var names, strange conditional statements). He's challenged as far as he puts forth effort, and it's not much.
I think in general when we hire interns/co-ops we're looking for someone who has a passion for what they do, an eagerness to learn, and the ability to be ok with doing some of the mundane. We aren't looking for people who are superstar coders, and that's been said by bosses here many times. What you learn in school isn't going to necessarily prepare you for what it's like in the real world. It will give you a good foundation, but most of what you learn will be on the job - and most managers recognize that.
The best way to contribute to a team is to listen, be a knowledge sponge, and ask questions frequently.